Commits

Bruce Eckel committed 4b769ef

Reworked Jython chapter; re-included sections that had been accidentally dropped. Mostly complete at this point but can probably benefit from another editing pass.

  • Participants
  • Parent commits 2bda9b6

Comments (0)

Files changed (13)

File code/Jython/GreenHouseLanguage.py

 
 class Event:
     events = [] # static
+
     def __init__(self, action, time):
         self.action = action
         self.time = time
         Event.events.append(self)
-    # Used by sort(). This will cause
-    # comparisons to be based only on time:
-    def __cmp__ (self, other):
-        if self.time < other.time: return -1
-        if self.time > other.time: return 1
-        return 0
-    def run(self):
-        print("%.2f: %s" % (self.time, self.action))
 
-class LightOn(Event):
-    def __init__(self, time):
-        Event.__init__(self, "Light on", time)
-
-class LightOff(Event):
-    def __init__(self, time):
-        Event.__init__(self, "Light off", time)
-
-class WaterOn(Event):
-    def __init__(self, time):
-        Event.__init__(self, "Water on", time)
-
-class WaterOff(Event):
-    def __init__(self, time):
-        Event.__init__(self, "Water off", time)
-
-class ThermostatNight(Event):
-    def __init__(self, time):
-        Event.__init__(self,"Thermostat night", time)
-
-class ThermostatDay(Event):
-    def __init__(self, time):
-        Event.__init__(self, "Thermostat day", time)
-
-class Bell(Event):
-    def __init__(self, time):
-        Event.__init__(self, "Ring bell", time)
-
-def run():
-    Event.events.sort();
-    for e in Event.events:
-        e.run()
-
-# To test, this will be run when you say:
-# python GreenHouseLanguage.py
-if __name__ == "__main__":
-    ThermostatNight(5.00)
-    LightOff(2.00)
-    WaterOn(3.30)
-    WaterOff(4.45)
-    LightOn(1.00)
-    ThermostatDay(6.00)
-    Bell(7.00)
-    run()
+    def __cmp__ (self, other):

File code/Jython/JavaClassInPython.py

 # Jython/JavaClassInPython.py
+# Using Java classes within Jython
 # run with: jython.bat JavaClassInPython.py
-# Using Java classes within Jython
 from java.util import Date, HashSet, HashMap
 from Jython.javaclass import JavaClass
 from math import sin
         return self.val[i], sin(self.val[i])
 
 # Java standard containers:
-map = HashMap()
-set = HashSet()
+jmap = HashMap()
+jset = HashSet()
 
 for x, y in ValGen(10):
-    map.put(x, y)
-    set.add(y)
-    set.add(y)
+    jmap.put(x, y)
+    jset.add(y)
+    jset.add(y)
 
-print(map)
-print(set)
+print(jmap)
+print(jset)
 
 # Iterating through a set:
-for z in set:
+for z in jset:
     print(z, z.__class__)
 
-print(map[3]) # Uses Python dictionary indexing
-for x in map.keySet(): # keySet() is a Map method
-    print(x, map[x])
+print(jmap[3]) # Uses Python dictionary indexing
+for x in jmap.keySet(): # keySet() is a Map method
+    print(x, jmap[x])
 
 # Using a Java class that you create yourself is
 # just as easy:

File code/Jython/PythonDialogs.py

 # Jython/PythonDialogs.py
-# Dialogs.java from "Thinking in Java," converted into Jython.
+# Dialogs.java from "Thinking in Java" converted into Jython.
 from java.awt import FlowLayout
 from javax.swing import JFrame, JDialog, JLabel
 from javax.swing import JButton
 
 class MyDialog(JDialog):
-  def __init__(self, parent=None):
-      JDialog.__init__(self,
-                       title="My dialog", modal=1)
-      self.contentPane.layout = FlowLayout()
-      self.contentPane.add(JLabel("A dialog!"))
-      self.contentPane.add(JButton("OK",
-          actionPerformed = lambda e, t=self: t.dispose()))
-      self.pack()
+    def __init__(self, parent=None):
+        JDialog.__init__(self, title="My dialog", modal=1)
+        self.contentPane.layout = FlowLayout()
+        self.contentPane.add(JLabel("A dialog!"))
+        self.contentPane.add(JButton("OK",
+          actionPerformed =
+            lambda e, t=self: t.dispose()))
+        self.pack()
 
 frame = JFrame("Dialogs", visible=1,
-               defaultCloseOperation=JFrame.EXIT_ON_CLOSE)
+  defaultCloseOperation=JFrame.EXIT_ON_CLOSE)
 dlg = MyDialog()
 frame.contentPane.add(
-    JButton("Press here to get a Dialog Box",
-            actionPerformed = lambda e: dlg.show()))
+  JButton("Press here to get a Dialog Box",
+    actionPerformed = lambda e: dlg.show()))
 frame.pack()

File code/Jython/PythonSwing.py

   defaultCloseOperation=JFrame.EXIT_ON_CLOSE)
 
 def kapow(e):
-    frame.contentPane.add(
-      JLabel("<html><i><font size=+4>Kapow!"))
-    # Force a re-layout to include the new label:
+    frame.contentPane.add(JLabel("<html>"+
+      "<i><font size=+4>Kapow!"))
+    # Force a re-layout to
+    # include the new label:
     frame.validate()
 
 button = JButton("<html><b><font size=+2>" +

File code/Jython/Walk_comprehension.py

+# Jython/Walk_comprehension.py
+import os
+restFiles = [os.path.join(d[0], f) for d in os.walk(".")
+             for f in d[2] if f.endswith(".java")]
+for r in restFiles:
+    print(r)

File html/Jython.html

 <p class="last">This chapter is being brought up to date with Jython 2.5,
 and will need changes when Jython 3 comes out.</p>
 </div>
+<div class="admonition note">
+<p class="first admonition-title">Note</p>
+<p class="last">Some of the descriptions in this chapter are introductory, so
+that the material can be used to introduce Java programmers to
+Jython.</p>
+</div>
 <p>This chapter looks at the value of crossing language boundaries. It is often
 advantageous to solve a problem using more than one programming language, rather
 than being arbitrarily stuck using a single language. As you&#8217;ll see in this
 pattern, which adds an interpreted language to your program to allow
 the end user to easily customize a solution. If the application user
 needs greater run time flexibility, for example to create scripts
-describing the desired behavior of the system, you can use the
+describing the desired behavior of the system, you can use
 <em>Interpreter</em> by creating and embedding a language interpreter into
 your program.</p>
 <p>In Java, the easiest and most powerful way to do this is with <em>Jython</em>
 <a class="footnote-reference" href="#id3" id="id1">[1]</a>, an implementation of Python in pure Java byte codes. As you will
 see, this brings together the benefits of both worlds.</p>
-<p><em>Interpreter</em> solves a particular problem - that of creating a
+<p><em>Interpreter</em> solves a particular problem &#8211; that of creating a
 scripting language for the user. But sometimes it&#8217;s just easier and
 faster to temporarily step into another language to solve a particular
 aspect of your problem. You&#8217;re not creating an interpreter, you&#8217;re
-just writing some code in another language.  Again, Jython is a good
-example of this, but CORBA also allows you to cross language
-boundaries.</p>
+just writing some code in another language.</p>
 <div class="section" id="interpreter-motivation">
 <h2>Interpreter Motivation<a class="headerlink" href="#interpreter-motivation" title="Permalink to this headline">¶</a></h2>
 <p>Remember that each design pattern allows one or more factors to change, so it&#8217;s
 <p>Python is designed with classes from the ground up and is a truly pure object
 oriented language (both C++ and Java violate purity in various ways). Python
 scales up so that you can create very big programs without losing control of the
-code.</p>
+code. Java projects have been quickly created using Jython, then later optimized by
+rewriting sections of the Jython code that have profiled as bottlenecks into Java.</p>
 </div>
 <div class="section" id="installation">
 <h2>Installation<a class="headerlink" href="#installation" title="Permalink to this headline">¶</a></h2>
 <p class="last">Select &#8220;test the beta&#8221;.</p>
 </div>
 <p>The download is a <strong>.class</strong> file, which will run an installer when
-you execute it with Java.</p>
+you execute it using <tt class="docutils literal"><span class="pre">java</span> <span class="pre">-jar</span></tt>.</p>
 <p>You also need the Java Development Kit (JDK), and to add
 <strong>jython-complete.jar</strong> to your Java CLASSPATH.  As an example, here
 is the appropriate section in my <tt class="docutils literal"><span class="pre">.bashrc</span></tt> for <strong>*nix</strong>; for Windows you
 faster because of its rapid startup time; the JVM always has a delay
 for startup.</p>
 <p>Note that things that require much more code (and often research) in
-Java are very quick to write in Jython.</p>
+Java are very quick to write in Jython. Here&#8217;s an example that uses
+a Python <em>list comprehension</em> with the <strong>os.walk()</strong> function to visit
+all the directories in a directory tree, and find all the files with names
+that end in <strong>.java</strong> (of course you can easily do more sophisticated things
+like opening the file and looking for information within it):</p>
+<div class="highlight-python"><div class="highlight"><pre><span class="c"># Jython/Walk_comprehension.py</span>
+<span class="k">import</span> <span class="nn">os</span>
+
+<span class="n">restFiles</span> <span class="o">=</span> <span class="p">[</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="mf">0</span><span class="p">],</span> <span class="n">f</span><span class="p">)</span> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">os</span><span class="o">.</span><span class="n">walk</span><span class="p">(</span><span class="s">&quot;.&quot;</span><span class="p">)</span>
+             <span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">d</span><span class="p">[</span><span class="mf">2</span><span class="p">]</span> <span class="k">if</span> <span class="n">f</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s">&quot;.java&quot;</span><span class="p">)]</span>
+
+<span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">restFiles</span><span class="p">:</span>
+    <span class="k">print</span><span class="p">(</span><span class="n">r</span><span class="p">)</span>
+</pre></div>
+</div>
+<p>You can certainly achieve this in Java. It will just take a lot longer.</p>
 <p>Often more sophisticated programs begin as scripts, and then evolve.
 The fact that you can quickly try things out allows you to test
 concepts, and then create more refined code as needed.</p>
 and the constructor of each will add itself to a (static) master
 list. The common data and behavior will be factored into the base
 class <strong>Event</strong>. Each <strong>Event</strong> object will contain an <strong>action</strong>
-string (for simplicity - in reality, you&#8217;d have some sort of
+string (for simplicity &#8211; in reality, you&#8217;d have some sort of
 functionality) and a time when the event is supposed to run.  The
 constructor initializes these fields, and then adds the new <strong>Event</strong>
 object to a static list called <strong>events</strong> (defining it in the class,
 
 <span class="k">class</span> <span class="nc">Event</span><span class="p">:</span>
     <span class="n">events</span> <span class="o">=</span> <span class="p">[]</span> <span class="c"># static</span>
+
     <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">action</span><span class="p">,</span> <span class="n">time</span><span class="p">):</span>
         <span class="bp">self</span><span class="o">.</span><span class="n">action</span> <span class="o">=</span> <span class="n">action</span>
         <span class="bp">self</span><span class="o">.</span><span class="n">time</span> <span class="o">=</span> <span class="n">time</span>
         <span class="n">Event</span><span class="o">.</span><span class="n">events</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
-    <span class="c"># Used by sort(). This will cause</span>
-    <span class="c"># comparisons to be based only on time:</span>
+
     <span class="k">def</span> <span class="nf">__cmp__</span> <span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        So sort() will compare only on time.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
         <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">time</span> <span class="o">&lt;</span> <span class="n">other</span><span class="o">.</span><span class="n">time</span><span class="p">:</span> <span class="k">return</span> <span class="o">-</span><span class="mf">1</span>
         <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">time</span> <span class="o">&gt;</span> <span class="n">other</span><span class="o">.</span><span class="n">time</span><span class="p">:</span> <span class="k">return</span> <span class="mf">1</span>
         <span class="k">return</span> <span class="mf">0</span>
+
     <span class="k">def</span> <span class="nf">run</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
         <span class="k">print</span><span class="p">(</span><span class="s">&quot;</span><span class="si">%.2f</span><span class="s">: </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">time</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">action</span><span class="p">))</span>
 
 </div>
 <p>The constructor of each derived class calls the base-class constructor, which
 adds the new object to the list. The <strong>run()</strong> function sorts the list, which
-automatically uses the <strong>__cmp__()</strong> method that was defined in <strong>Event</strong> to
+automatically uses the <strong>__cmp__()</strong> method defined in <strong>Event</strong> to
 base comparisons on time only. In this example, it only prints out the list, but
 in the real system it would wait for the time of each event to come up and then
 run the event.</p>
 <p>The <strong>__main__</strong> section performs a simple test on the classes.</p>
-<p>The above file is now a module that can be included in another Python program to
-define all the classes it contains. But instead of an ordinary Python program,
-let&#8217;s use Jython, inside of Java. This turns out to be remarkably simple: you
-import some Jython classes, create a <strong>PythonInterpreter</strong> object, and cause the
-Python files to be loaded:</p>
+<p>The above file &#8211; which is an ordinary Python program &#8211; is now a
+module that can be included in another Python program.
+But instead of using it in an ordinary Python program,
+let&#8217;s use Jython, inside of Java. This turns out to be remarkably
+simple: you import some Jython classes, create a <strong>PythonInterpreter</strong>
+object, and cause the Python files to be loaded:</p>
 <div class="highlight-java"><div class="highlight"><pre><span class="c">// Jython/GreenHouseController.java</span>
 <span class="k">import</span> <span class="nn">org.python.core.*</span><span class="o">;</span>
 <span class="k">import</span> <span class="nn">org.python.util.PythonInterpreter</span><span class="o">;</span>
 <strong>exec()</strong>, which allows you to send a command to the interpreter. In
 the above program, the <strong>run()</strong> function is called using <strong>exec()</strong>.</p>
 </div>
+<div class="section" id="using-java-libraries">
+<h2>Using Java libraries<a class="headerlink" href="#using-java-libraries" title="Permalink to this headline">¶</a></h2>
+<p>Jython wraps the Java libraries so that any of them can be used directly or via
+inheritance. In addition, Python shorthand simplifies coding.</p>
+<p>As an example, consider the <strong>HTMLButton.java</strong> example from
+<em>Thinking in Java</em>. Here is its conversion to Jython:</p>
+<div class="highlight-python"><div class="highlight"><pre><span class="c"># Jython/PythonSwing.py</span>
+<span class="c"># The HTMLButton.java example from &quot;Thinking in Java&quot;</span>
+<span class="c"># converted into Jython.</span>
+<span class="k">from</span> <span class="nn">javax.swing</span> <span class="k">import</span> <span class="n">JFrame</span><span class="p">,</span> <span class="n">JButton</span><span class="p">,</span> <span class="n">JLabel</span>
+<span class="k">from</span> <span class="nn">java.awt</span> <span class="k">import</span> <span class="n">FlowLayout</span>
+
+<span class="n">frame</span> <span class="o">=</span> <span class="n">JFrame</span><span class="p">(</span><span class="s">&quot;HTMLButton&quot;</span><span class="p">,</span> <span class="n">visible</span><span class="o">=</span><span class="mf">1</span><span class="p">,</span>
+  <span class="n">defaultCloseOperation</span><span class="o">=</span><span class="n">JFrame</span><span class="o">.</span><span class="n">EXIT_ON_CLOSE</span><span class="p">)</span>
+
+<span class="k">def</span> <span class="nf">kapow</span><span class="p">(</span><span class="n">e</span><span class="p">):</span>
+    <span class="n">frame</span><span class="o">.</span><span class="n">contentPane</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">JLabel</span><span class="p">(</span><span class="s">&quot;&lt;html&gt;&quot;</span><span class="o">+</span>
+      <span class="s">&quot;&lt;i&gt;&lt;font size=+4&gt;Kapow!&quot;</span><span class="p">))</span>
+    <span class="c"># Force a re-layout to</span>
+    <span class="c"># include the new label:</span>
+    <span class="n">frame</span><span class="o">.</span><span class="n">validate</span><span class="p">()</span>
+
+<span class="n">button</span> <span class="o">=</span> <span class="n">JButton</span><span class="p">(</span><span class="s">&quot;&lt;html&gt;&lt;b&gt;&lt;font size=+2&gt;&quot;</span> <span class="o">+</span>
+  <span class="s">&quot;&lt;center&gt;Hello!&lt;br&gt;&lt;i&gt;Press me now!&quot;</span><span class="p">,</span>
+  <span class="n">actionPerformed</span><span class="o">=</span><span class="n">kapow</span><span class="p">)</span>
+<span class="n">frame</span><span class="o">.</span><span class="n">contentPane</span><span class="o">.</span><span class="n">layout</span> <span class="o">=</span> <span class="n">FlowLayout</span><span class="p">()</span>
+<span class="n">frame</span><span class="o">.</span><span class="n">contentPane</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">button</span><span class="p">)</span>
+<span class="n">frame</span><span class="o">.</span><span class="n">pack</span><span class="p">()</span>
+<span class="n">frame</span><span class="o">.</span><span class="n">size</span><span class="o">=</span><span class="mf">200</span><span class="p">,</span> <span class="mf">500</span>
+</pre></div>
+</div>
+<p>If you compare the Java version of the program to the above Jython
+implementation, you&#8217;ll see that Jython is shorter and generally easier to
+understand. For example, to set up the frame in the Java version you had to make
+several calls: the constructor for <strong>JFrame()</strong>, the <strong>setVisible()</strong> method
+and the <strong>setDefaultCloseOperation()</strong> method, whereas in the above code all
+three of these operations are performed with a single constructor call.</p>
+<p>Also notice that the <strong>JButton</strong> is configured with an <strong>actionListener()</strong>
+method inside the constructor, with the assignment to <strong>kapow</strong>. In addition,
+Jython&#8217;s JavaBean awareness means that a call to any method with a name that
+begins with &#8220;<strong>set</strong>&#8221; can be replaced with an assignment, as you see above.</p>
+<p>The only method that did not come over from Java is the <strong>pack()</strong> method,
+which seems to be essential in order to force the layout to happen properly.
+It&#8217;s also important that the call to <strong>pack()</strong> appear <em>before</em> the <strong>size</strong>
+setting.</p>
+<div class="section" id="inheriting-from-java-library-classes">
+<h3>Inheriting from Java library Classes<a class="headerlink" href="#inheriting-from-java-library-classes" title="Permalink to this headline">¶</a></h3>
+<p>You can easily inherit from standard Java library classes in
+Jython. Here&#8217;s the <strong>Dialogs.java</strong> example from <em>Thinking in Java</em>,
+converted into Jython:</p>
+<div class="highlight-python"><div class="highlight"><pre><span class="c"># Jython/PythonDialogs.py</span>
+<span class="c"># Dialogs.java from &quot;Thinking in Java&quot; converted into Jython.</span>
+<span class="k">from</span> <span class="nn">java.awt</span> <span class="k">import</span> <span class="n">FlowLayout</span>
+<span class="k">from</span> <span class="nn">javax.swing</span> <span class="k">import</span> <span class="n">JFrame</span><span class="p">,</span> <span class="n">JDialog</span><span class="p">,</span> <span class="n">JLabel</span>
+<span class="k">from</span> <span class="nn">javax.swing</span> <span class="k">import</span> <span class="n">JButton</span>
+
+<span class="k">class</span> <span class="nc">MyDialog</span><span class="p">(</span><span class="n">JDialog</span><span class="p">):</span>
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parent</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
+        <span class="n">JDialog</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">title</span><span class="o">=</span><span class="s">&quot;My dialog&quot;</span><span class="p">,</span> <span class="n">modal</span><span class="o">=</span><span class="mf">1</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">contentPane</span><span class="o">.</span><span class="n">layout</span> <span class="o">=</span> <span class="n">FlowLayout</span><span class="p">()</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">contentPane</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">JLabel</span><span class="p">(</span><span class="s">&quot;A dialog!&quot;</span><span class="p">))</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">contentPane</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">JButton</span><span class="p">(</span><span class="s">&quot;OK&quot;</span><span class="p">,</span>
+          <span class="n">actionPerformed</span> <span class="o">=</span>
+            <span class="k">lambda</span> <span class="n">e</span><span class="p">,</span> <span class="n">t</span><span class="o">=</span><span class="bp">self</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">dispose</span><span class="p">()))</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">pack</span><span class="p">()</span>
+
+<span class="n">frame</span> <span class="o">=</span> <span class="n">JFrame</span><span class="p">(</span><span class="s">&quot;Dialogs&quot;</span><span class="p">,</span> <span class="n">visible</span><span class="o">=</span><span class="mf">1</span><span class="p">,</span>
+  <span class="n">defaultCloseOperation</span><span class="o">=</span><span class="n">JFrame</span><span class="o">.</span><span class="n">EXIT_ON_CLOSE</span><span class="p">)</span>
+<span class="n">dlg</span> <span class="o">=</span> <span class="n">MyDialog</span><span class="p">()</span>
+<span class="n">frame</span><span class="o">.</span><span class="n">contentPane</span><span class="o">.</span><span class="n">add</span><span class="p">(</span>
+  <span class="n">JButton</span><span class="p">(</span><span class="s">&quot;Press here to get a Dialog Box&quot;</span><span class="p">,</span>
+    <span class="n">actionPerformed</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">e</span><span class="p">:</span> <span class="n">dlg</span><span class="o">.</span><span class="n">show</span><span class="p">()))</span>
+<span class="n">frame</span><span class="o">.</span><span class="n">pack</span><span class="p">()</span>
+</pre></div>
+</div>
+<p><strong>MyDialog</strong> is inherited from <strong>JDialog</strong>, and you can see named arguments
+being used in the call to the base-class constructor.</p>
+<p>In the creation of the &#8220;OK&#8221; <strong>JButton</strong>, note that the <strong>actionPerformed</strong>
+method is set right inside the constructor, and that the function is created
+using the Python <strong>lambda</strong> keyword. This creates a nameless function with the
+arguments appearing before the colon and the expression that generates the
+returned value after the colon. As you should know, the Java prototype for the
+<strong>actionPerformed()</strong> method only contains a single argument, but the lambda
+expression indicates two. However, the second argument is provided with a
+default value, so the function <em>can</em> be called with only one argument. The
+reason for the second argument is seen in the default value, because this is a
+way to pass <strong>self</strong> into the lambda expression, so that it can be used to
+dispose of the dialog.</p>
+<p>Compare this code with the version that&#8217;s published in <em>Thinking in Java</em>.
+You&#8217;ll find that Python language features allow a much more succinct and direct
+implementation.</p>
+</div>
+</div>
 <div class="section" id="controlling-java-from-jython">
 <h2>Controlling Java from Jython<a class="headerlink" href="#controlling-java-from-jython" title="Permalink to this headline">¶</a></h2>
-<p>Since you have the Java language at your disposal, and you can set and retrieve
-values in the interpreter, there&#8217;s a tremendous amount that you can accomplish
-with the above approach (controlling Python from Java).  But one of the amazing
-things about Jython is that it makes Java classes almost transparently available
-from within Jython. Basically, a Java class looks like a Python class. This is
-true for standard Java library classes as well as classes that you create
-yourself, as you can see here:</p>
+<p>There&#8217;s a tremendous amount that you can accomplish by controlling
+Python from Java.  But one of the amazing things about Jython is that
+it makes Java classes almost transparently available from within
+Jython. Basically, a Java class looks like a Python class. This is
+true for standard Java library classes as well as classes that you
+create yourself, as you can see here:</p>
 <div class="highlight-python"><div class="highlight"><pre><span class="c"># Jython/JavaClassInPython.py</span>
+<span class="c"># Using Java classes within Jython</span>
 <span class="c"># run with: jython.bat JavaClassInPython.py</span>
-<span class="c"># Using Java classes within Jython</span>
 <span class="k">from</span> <span class="nn">java.util</span> <span class="k">import</span> <span class="n">Date</span><span class="p">,</span> <span class="n">HashSet</span><span class="p">,</span> <span class="n">HashMap</span>
 <span class="k">from</span> <span class="nn">Jython.javaclass</span> <span class="k">import</span> <span class="n">JavaClass</span>
 <span class="k">from</span> <span class="nn">math</span> <span class="k">import</span> <span class="n">sin</span>
         <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">val</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">sin</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">val</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
 
 <span class="c"># Java standard containers:</span>
-<span class="nb">map</span> <span class="o">=</span> <span class="n">HashMap</span><span class="p">()</span>
-<span class="n">set</span> <span class="o">=</span> <span class="n">HashSet</span><span class="p">()</span>
+<span class="n">jmap</span> <span class="o">=</span> <span class="n">HashMap</span><span class="p">()</span>
+<span class="n">jset</span> <span class="o">=</span> <span class="n">HashSet</span><span class="p">()</span>
 
 <span class="k">for</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="ow">in</span> <span class="n">ValGen</span><span class="p">(</span><span class="mf">10</span><span class="p">):</span>
-    <span class="nb">map</span><span class="o">.</span><span class="n">put</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span>
-    <span class="n">set</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">y</span><span class="p">)</span>
-    <span class="n">set</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">y</span><span class="p">)</span>
+    <span class="n">jmap</span><span class="o">.</span><span class="n">put</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span>
+    <span class="n">jset</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">y</span><span class="p">)</span>
+    <span class="n">jset</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">y</span><span class="p">)</span>
 
-<span class="k">print</span><span class="p">(</span><span class="nb">map</span><span class="p">)</span>
-<span class="k">print</span><span class="p">(</span><span class="n">set</span><span class="p">)</span>
+<span class="k">print</span><span class="p">(</span><span class="n">jmap</span><span class="p">)</span>
+<span class="k">print</span><span class="p">(</span><span class="n">jset</span><span class="p">)</span>
 
 <span class="c"># Iterating through a set:</span>
-<span class="k">for</span> <span class="n">z</span> <span class="ow">in</span> <span class="n">set</span><span class="p">:</span>
+<span class="k">for</span> <span class="n">z</span> <span class="ow">in</span> <span class="n">jset</span><span class="p">:</span>
     <span class="k">print</span><span class="p">(</span><span class="n">z</span><span class="p">,</span> <span class="n">z</span><span class="o">.</span><span class="n">__class__</span><span class="p">)</span>
 
-<span class="k">print</span><span class="p">(</span><span class="nb">map</span><span class="p">[</span><span class="mf">3</span><span class="p">])</span> <span class="c"># Uses Python dictionary indexing</span>
-<span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">map</span><span class="o">.</span><span class="n">keySet</span><span class="p">():</span> <span class="c"># keySet() is a Map method</span>
-    <span class="k">print</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="nb">map</span><span class="p">[</span><span class="n">x</span><span class="p">])</span>
+<span class="k">print</span><span class="p">(</span><span class="n">jmap</span><span class="p">[</span><span class="mf">3</span><span class="p">])</span> <span class="c"># Uses Python dictionary indexing</span>
+<span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">jmap</span><span class="o">.</span><span class="n">keySet</span><span class="p">():</span> <span class="c"># keySet() is a Map method</span>
+    <span class="k">print</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">jmap</span><span class="p">[</span><span class="n">x</span><span class="p">])</span>
 
 <span class="c"># Using a Java class that you create yourself is</span>
 <span class="c"># just as easy:</span>
 <span class="k">print</span><span class="p">(</span><span class="n">jc</span><span class="o">.</span><span class="n">val</span><span class="p">)</span>
 </pre></div>
 </div>
+<div class="admonition-todo admonition " id="todo-20">
+<p class="first admonition-title">Todo</p>
+<p class="last">rewrite to distinguish python generator from above description, or
+choose different name.</p>
+</div>
 <p>Note that the <strong>import</strong> statements map to the Java package structure exactly as
 you would expect. In the first example, a <strong>Date()</strong> object is created as if it
 were a native Python class, and printing this object just calls <strong>toString()</strong>.</p>
 Python automatically &#8220;unpacks&#8221; the tuple so that you can have multiple iterators
 in the <strong>for</strong>. These are the kinds of syntax simplifications that make Python
 so endearing.</p>
-<p>The <strong>map</strong> and <strong>set</strong> objects are instances of Java&#8217;s <strong>HashMap</strong> and
+<p>The <strong>jmap</strong> and <strong>jset</strong> objects are instances of Java&#8217;s <strong>HashMap</strong> and
 <strong>HashSet</strong>, again created as if those classes were just native Python
 components. In the <strong>for</strong> loop, the <strong>put()</strong> and <strong>add()</strong> methods work just
 like they do in Java. Also, indexing into a Java <strong>Map</strong> uses the same notation
 understands JavaBeans properties, since you can either use the <strong>getVal()</strong> and
 <strong>setVal()</strong> methods, or assign to and read from the equivalent <strong>val</strong>
 property. Also, <strong>getChars()</strong> returns a <strong>Character[]</strong> in Java, and this
-becomes an array in Python.</p>
+automatically becomes an array in Python.</p>
 <p>The easiest way to use Java classes that you create for use inside a Python
 program is to put them inside a package. Although Jython can also import
 unpackaged java classes (<strong>import JavaClass</strong>), all such unpackaged java classes
 will be treated as if they were defined in different packages so they can only
 see each other&#8217;s public methods.</p>
-<p>Java packages translate into Python modules, and Python must import a module in
+<p>Java packages translate into Jython modules, and Jython must import a module in
 order to be able to use the Java class. Here is the Java code for <strong>JavaClass</strong>:</p>
 <div class="highlight-java"><div class="highlight"><pre><span class="c">// Jython/javaclass/JavaClass.java</span>
 <span class="k">package</span> <span class="n">Jython</span><span class="o">.</span><span class="na">javaclass</span><span class="o">;</span>
 and you can index into it as if it were an array, trying to create a slice
 fails. To completely convert it into an array, one approach is to simply extract
 a Java array using <strong>toArray()</strong>, and pass that in. The <strong>set()</strong> method
-converts it to a <strong>PyArray</strong> - one of the classes provided with Jython - which
+converts it to a <strong>PyArray</strong> &#8211; one of the classes provided with Jython &#8211; which
 can be treated as a Python array (you can also explicitly create a <strong>PyArray</strong>,
 but this seems unnecessary).</p>
 <p>Finally, a <strong>Map</strong> is created and passed directly into the interpreter. While it
 compilation: you must inherit from a Java class or interface in your Python
 class (you do not need to specify the <strong>&#64;sig</strong> signature for methods defined in
 the superclass/interface). If you do not do this, you won&#8217;t get your desired
-methods - unfortunately, <strong>jythonc</strong> gives you no warnings or errors in this
+methods &#8211; unfortunately, <strong>jythonc</strong> gives you no warnings or errors in this
 case, but you won&#8217;t get what you want. If you don&#8217;t see what&#8217;s missing, it can
 be very frustrating.</p>
 <p>In addition, you must import the appropriate java class and give the correct
 <h3>Building Java Classes from Python<a class="headerlink" href="#building-java-classes-from-python" title="Permalink to this headline">¶</a></h3>
 <p>Part of the trick of creating Java classes from Python code is the &#64;sig
 information in the method documentation strings. But there&#8217;s a second problem
-which stems from the fact that Python has no &#8220;package&#8221; keyword - the Python
+which stems from the fact that Python has no &#8220;package&#8221; keyword &#8211; the Python
 equivalent of packages (modules) are implicitly created based on the file name.
 However, to bring the resulting class files into the Java program, <strong>jythonc</strong>
 must be given information about how to create the Java package for the Python
 Python is usually slower, however, but even if you end up re-coding parts of
 your program for speed, the initial fast development will allow you to more
 quickly flesh out the system and uncover and solve the critical sections. And
-often, the execution speed of Python is not a problem - in those cases it&#8217;s an
+often, the execution speed of Python is not a problem &#8211; in those cases it&#8217;s an
 even bigger win. A number of commercial products already use Java and Jython,
 and because of the terrific productivity leverage I expect to see this happen
 more in the future.</p>
 Java classes (add the &#64;sig documentation strings to produce the correct Java
 signatures, and create a makefile to build the Java <strong>.class</strong> files). Write
 a Java program that uses these classes.</li>
+<li>Modify <strong>GreenHouseLanguage.py</strong> so that the subclasses of <strong>Event</strong> are not
+discrete classes, but are instead <em>generated</em> by a single function which creates
+the class and the associated string dynamically.</li>
 </ol>
 <p class="rubric">Footnotes</p>
 <table class="docutils footnote" frame="void" id="id3" rules="none">
 </li>
 <li><a class="reference external" href="#scripting">Scripting</a></li>
 <li><a class="reference external" href="#creating-a-language">Creating a Language</a></li>
+<li><a class="reference external" href="#using-java-libraries">Using Java libraries</a><ul>
+<li><a class="reference external" href="#inheriting-from-java-library-classes">Inheriting from Java library Classes</a></li>
+</ul>
+</li>
 <li><a class="reference external" href="#controlling-java-from-jython">Controlling Java from Jython</a><ul>
 <li><a class="reference external" href="#inner-classes">Inner Classes</a></li>
 </ul>
     </div>
     <div class="footer">
       &copy; Copyright 2008, Creative Commons Attribution-Share Alike 3.0.
-      Last updated on Dec 29, 2008.
+      Last updated on Dec 30, 2008.
       Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 0.6.
     </div>
   </body>

File html/ToDo.html

 <p class="last">Someone who knows more about emacs for Linux please add more specific information about the windowed version(s).</p>
 </div>
 <p>(The original entry is located in DeveloperGuide.rst, line 299 and can be found <a class="reference external" href="DeveloperGuide.html#todo-14"><em>here</em></a>.)</p>
+<div class="admonition-todo admonition ">
+<p class="first admonition-title">Todo</p>
+<p class="last">rewrite to distinguish python generator from above description, or
+choose different name.</p>
+</div>
+<p>(The original entry is located in Jython.rst, line 492 and can be found <a class="reference external" href="Jython.html#todo-20"><em>here</em></a>.)</p>
 </div>
 
 
     </div>
     <div class="footer">
       &copy; Copyright 2008, Creative Commons Attribution-Share Alike 3.0.
-      Last updated on Dec 29, 2008.
+      Last updated on Dec 30, 2008.
       Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 0.6.
     </div>
   </body>

File html/_sources/Jython.txt

 Jython
 ********************************************************************************
 
-.. note:: This chapter is being brought up to date with Jython 2.5,
-   	  and will need changes when Jython 3 comes out.
+.. note::  This chapter is being brought up to date with Jython 2.5,
+   	   and will need changes when Jython 3 comes out.
+
+.. note::  Some of the descriptions in this chapter are introductory, so
+   	   that the material can be used to introduce Java programmers to
+	   Jython.
 
 This chapter looks at the value of crossing language boundaries. It is often
 advantageous to solve a problem using more than one programming language, rather
 pattern, which adds an interpreted language to your program to allow
 the end user to easily customize a solution. If the application user
 needs greater run time flexibility, for example to create scripts
-describing the desired behavior of the system, you can use the
+describing the desired behavior of the system, you can use
 *Interpreter* by creating and embedding a language interpreter into
 your program.
 
 [#]_, an implementation of Python in pure Java byte codes. As you will
 see, this brings together the benefits of both worlds.
 
-*Interpreter* solves a particular problem - that of creating a
+*Interpreter* solves a particular problem -- that of creating a
 scripting language for the user. But sometimes it's just easier and
 faster to temporarily step into another language to solve a particular
 aspect of your problem. You're not creating an interpreter, you're
-just writing some code in another language.  Again, Jython is a good
-example of this, but CORBA also allows you to cross language
-boundaries.
+just writing some code in another language.
 
 Interpreter Motivation
 =======================================================================
 Python is designed with classes from the ground up and is a truly pure object
 oriented language (both C++ and Java violate purity in various ways). Python
 scales up so that you can create very big programs without losing control of the
-code.
+code. Java projects have been quickly created using Jython, then later optimized by
+rewriting sections of the Jython code that have profiled as bottlenecks into Java.
 
 Installation
 =======================================================================
 .. note:: Select "test the beta".
 
 The download is a **.class** file, which will run an installer when
-you execute it with Java.
+you execute it using ``java -jar``.
 
 You also need the Java Development Kit (JDK), and to add
 **jython-complete.jar** to your Java CLASSPATH.  As an example, here
 for startup.
 
 Note that things that require much more code (and often research) in
-Java are very quick to write in Jython.
+Java are very quick to write in Jython. Here's an example that uses
+a Python *list comprehension* with the **os.walk()** function to visit
+all the directories in a directory tree, and find all the files with names
+that end in **.java** (of course you can easily do more sophisticated things
+like opening the file and looking for information within it)::
+
+     # Jython/Walk_comprehension.py
+     import os
+
+     restFiles = [os.path.join(d[0], f) for d in os.walk(".")
+                  for f in d[2] if f.endswith(".java")]
+
+     for r in restFiles:
+     	 print(r)
+
+You can certainly achieve this in Java. It will just take a lot longer.
 
 Often more sophisticated programs begin as scripts, and then evolve.
 The fact that you can quickly try things out allows you to test
 and the constructor of each will add itself to a (static) master
 list. The common data and behavior will be factored into the base
 class **Event**. Each **Event** object will contain an **action**
-string (for simplicity - in reality, you'd have some sort of
+string (for simplicity -- in reality, you'd have some sort of
 functionality) and a time when the event is supposed to run.  The
 constructor initializes these fields, and then adds the new **Event**
 object to a static list called **events** (defining it in the class,
 
     class Event:
         events = [] # static
+
         def __init__(self, action, time):
             self.action = action
             self.time = time
             Event.events.append(self)
-        # Used by sort(). This will cause
-        # comparisons to be based only on time:
+
         def __cmp__ (self, other):
+	    """
+	    So sort() will compare only on time.
+	    """
             if self.time < other.time: return -1
             if self.time > other.time: return 1
             return 0
+
         def run(self):
             print("%.2f: %s" % (self.time, self.action))
 
 
 The constructor of each derived class calls the base-class constructor, which
 adds the new object to the list. The **run()** function sorts the list, which
-automatically uses the **__cmp__()** method that was defined in **Event** to
+automatically uses the **__cmp__()** method defined in **Event** to
 base comparisons on time only. In this example, it only prints out the list, but
 in the real system it would wait for the time of each event to come up and then
 run the event.
 
 The **__main__** section performs a simple test on the classes.
 
-The above file is now a module that can be included in another Python program to
-define all the classes it contains. But instead of an ordinary Python program,
-let's use Jython, inside of Java. This turns out to be remarkably simple: you
-import some Jython classes, create a **PythonInterpreter** object, and cause the
-Python files to be loaded:
+The above file -- which is an ordinary Python program -- is now a
+module that can be included in another Python program.
+But instead of using it in an ordinary Python program,
+let's use Jython, inside of Java. This turns out to be remarkably
+simple: you import some Jython classes, create a **PythonInterpreter**
+object, and cause the Python files to be loaded:
 
 ..  code-block:: java
 
       }
     }
 
-
 The **PythonInterpreter** object is a complete Python interpreter that accepts
 commands from the Java program. One of these commands is **execfile()**, which
 tells it to execute all the statements it finds in a particular file. By
 **exec()**, which allows you to send a command to the interpreter. In
 the above program, the **run()** function is called using **exec()**.
 
+Using Java libraries
+=======================================================================
+
+Jython wraps the Java libraries so that any of them can be used directly or via
+inheritance. In addition, Python shorthand simplifies coding.
+
+As an example, consider the **HTMLButton.java** example from
+*Thinking in Java*. Here is its conversion to Jython::
+
+    # Jython/PythonSwing.py
+    # The HTMLButton.java example from "Thinking in Java"
+    # converted into Jython.
+    from javax.swing import JFrame, JButton, JLabel
+    from java.awt import FlowLayout
+
+    frame = JFrame("HTMLButton", visible=1,
+      defaultCloseOperation=JFrame.EXIT_ON_CLOSE)
+
+    def kapow(e):
+        frame.contentPane.add(JLabel("<html>"+
+          "<i><font size=+4>Kapow!"))
+        # Force a re-layout to
+        # include the new label:
+        frame.validate()
+
+    button = JButton("<html><b><font size=+2>" +
+      "<center>Hello!<br><i>Press me now!",
+      actionPerformed=kapow)
+    frame.contentPane.layout = FlowLayout()
+    frame.contentPane.add(button)
+    frame.pack()
+    frame.size=200, 500
+
+If you compare the Java version of the program to the above Jython
+implementation, you'll see that Jython is shorter and generally easier to
+understand. For example, to set up the frame in the Java version you had to make
+several calls: the constructor for **JFrame()**, the **setVisible()** method
+and the **setDefaultCloseOperation()** method, whereas in the above code all
+three of these operations are performed with a single constructor call.
+
+Also notice that the **JButton** is configured with an **actionListener()**
+method inside the constructor, with the assignment to **kapow**. In addition,
+Jython's JavaBean awareness means that a call to any method with a name that
+begins with "**set**" can be replaced with an assignment, as you see above.
+
+The only method that did not come over from Java is the **pack()** method,
+which seems to be essential in order to force the layout to happen properly.
+It's also important that the call to **pack()** appear *before* the **size**
+setting.
+
+Inheriting from Java library Classes
+-------------------------------------------------------------------------------
+
+You can easily inherit from standard Java library classes in
+Jython. Here's the **Dialogs.java** example from *Thinking in Java*,
+converted into Jython::
+
+    # Jython/PythonDialogs.py
+    # Dialogs.java from "Thinking in Java" converted into Jython.
+    from java.awt import FlowLayout
+    from javax.swing import JFrame, JDialog, JLabel
+    from javax.swing import JButton
+
+    class MyDialog(JDialog):
+        def __init__(self, parent=None):
+            JDialog.__init__(self, title="My dialog", modal=1)
+            self.contentPane.layout = FlowLayout()
+            self.contentPane.add(JLabel("A dialog!"))
+            self.contentPane.add(JButton("OK",
+              actionPerformed =
+                lambda e, t=self: t.dispose()))
+            self.pack()
+
+    frame = JFrame("Dialogs", visible=1,
+      defaultCloseOperation=JFrame.EXIT_ON_CLOSE)
+    dlg = MyDialog()
+    frame.contentPane.add(
+      JButton("Press here to get a Dialog Box",
+        actionPerformed = lambda e: dlg.show()))
+    frame.pack()
+
+
+**MyDialog** is inherited from **JDialog**, and you can see named arguments
+being used in the call to the base-class constructor.
+
+In the creation of the "OK" **JButton**, note that the **actionPerformed**
+method is set right inside the constructor, and that the function is created
+using the Python **lambda** keyword. This creates a nameless function with the
+arguments appearing before the colon and the expression that generates the
+returned value after the colon. As you should know, the Java prototype for the
+**actionPerformed()** method only contains a single argument, but the lambda
+expression indicates two. However, the second argument is provided with a
+default value, so the function *can* be called with only one argument. The
+reason for the second argument is seen in the default value, because this is a
+way to pass **self** into the lambda expression, so that it can be used to
+dispose of the dialog.
+
+Compare this code with the version that's published in *Thinking in Java*.
+You'll find that Python language features allow a much more succinct and direct
+implementation.
+
+
 Controlling Java from Jython
 =======================================================================
 
-Since you have the Java language at your disposal, and you can set and retrieve
-values in the interpreter, there's a tremendous amount that you can accomplish
-with the above approach (controlling Python from Java).  But one of the amazing
-things about Jython is that it makes Java classes almost transparently available
-from within Jython. Basically, a Java class looks like a Python class. This is
-true for standard Java library classes as well as classes that you create
-yourself, as you can see here::
+There's a tremendous amount that you can accomplish by controlling
+Python from Java.  But one of the amazing things about Jython is that
+it makes Java classes almost transparently available from within
+Jython. Basically, a Java class looks like a Python class. This is
+true for standard Java library classes as well as classes that you
+create yourself, as you can see here::
 
     # Jython/JavaClassInPython.py
+    # Using Java classes within Jython
     # run with: jython.bat JavaClassInPython.py
-    # Using Java classes within Jython
     from java.util import Date, HashSet, HashMap
     from Jython.javaclass import JavaClass
     from math import sin
             return self.val[i], sin(self.val[i])
 
     # Java standard containers:
-    map = HashMap()
-    set = HashSet()
+    jmap = HashMap()
+    jset = HashSet()
 
     for x, y in ValGen(10):
-        map.put(x, y)
-        set.add(y)
-        set.add(y)
+        jmap.put(x, y)
+        jset.add(y)
+        jset.add(y)
 
-    print(map)
-    print(set)
+    print(jmap)
+    print(jset)
 
     # Iterating through a set:
-    for z in set:
+    for z in jset:
         print(z, z.__class__)
 
-    print(map[3]) # Uses Python dictionary indexing
-    for x in map.keySet(): # keySet() is a Map method
-        print(x, map[x])
+    print(jmap[3]) # Uses Python dictionary indexing
+    for x in jmap.keySet(): # keySet() is a Map method
+        print(x, jmap[x])
 
     # Using a Java class that you create yourself is
     # just as easy:
     jc.val = "Using bean properties"
     print(jc.val)
 
+..  todo:: rewrite to distinguish python generator from above description, or
+    	   choose different name.
+
 Note that the **import** statements map to the Java package structure exactly as
 you would expect. In the first example, a **Date()** object is created as if it
 were a native Python class, and printing this object just calls **toString()**.
 in the **for**. These are the kinds of syntax simplifications that make Python
 so endearing.
 
-The **map** and **set** objects are instances of Java's **HashMap** and
+The **jmap** and **jset** objects are instances of Java's **HashMap** and
 **HashSet**, again created as if those classes were just native Python
 components. In the **for** loop, the **put()** and **add()** methods work just
 like they do in Java. Also, indexing into a Java **Map** uses the same notation
 understands JavaBeans properties, since you can either use the **getVal()** and
 **setVal()** methods, or assign to and read from the equivalent **val**
 property. Also, **getChars()** returns a **Character[]** in Java, and this
-becomes an array in Python.
+automatically becomes an array in Python.
 
 The easiest way to use Java classes that you create for use inside a Python
 program is to put them inside a package. Although Jython can also import
 will be treated as if they were defined in different packages so they can only
 see each other's public methods.
 
-Java packages translate into Python modules, and Python must import a module in
+Java packages translate into Jython modules, and Jython must import a module in
 order to be able to use the Java class. Here is the Java code for **JavaClass**:
 
 ..  code-block:: java
 and you can index into it as if it were an array, trying to create a slice
 fails. To completely convert it into an array, one approach is to simply extract
 a Java array using **toArray()**, and pass that in. The **set()** method
-converts it to a **PyArray** - one of the classes provided with Jython - which
+converts it to a **PyArray** -- one of the classes provided with Jython -- which
 can be treated as a Python array (you can also explicitly create a **PyArray**,
 but this seems unnecessary).
 
 compilation: you must inherit from a Java class or interface in your Python
 class (you do not need to specify the **@sig** signature for methods defined in
 the superclass/interface). If you do not do this, you won't get your desired
-methods - unfortunately, **jythonc** gives you no warnings or errors in this
+methods -- unfortunately, **jythonc** gives you no warnings or errors in this
 case, but you won't get what you want. If you don't see what's missing, it can
 be very frustrating.
 
 
 Part of the trick of creating Java classes from Python code is the @sig
 information in the method documentation strings. But there's a second problem
-which stems from the fact that Python has no "package" keyword - the Python
+which stems from the fact that Python has no "package" keyword -- the Python
 equivalent of packages (modules) are implicitly created based on the file name.
 However, to bring the resulting class files into the Java program, **jythonc**
 must be given information about how to create the Java package for the Python
 Python is usually slower, however, but even if you end up re-coding parts of
 your program for speed, the initial fast development will allow you to more
 quickly flesh out the system and uncover and solve the critical sections. And
-often, the execution speed of Python is not a problem - in those cases it's an
+often, the execution speed of Python is not a problem -- in those cases it's an
 even bigger win. A number of commercial products already use Java and Jython,
 and because of the terrific productivity leverage I expect to see this happen
 more in the future.
     signatures, and create a makefile to build the Java **.class** files). Write
     a Java program that uses these classes.
 
+#.  Modify **GreenHouseLanguage.py** so that the subclasses of **Event** are not
+    discrete classes, but are instead *generated* by a single function which creates
+    the class and the associated string dynamically.
+
 .. rubric:: Footnotes
 
 .. [#]  The original version of this was called *JPython*\, but the project

File html/genindex.html

     </div>
     <div class="footer">
       &copy; Copyright 2008, Creative Commons Attribution-Share Alike 3.0.
-      Last updated on Dec 29, 2008.
+      Last updated on Dec 30, 2008.
       Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 0.6.
     </div>
   </body>

File html/index.html

 </li>
 <li class="toctree-l2"><a class="reference external" href="Jython.html#scripting">Scripting</a></li>
 <li class="toctree-l2"><a class="reference external" href="Jython.html#creating-a-language">Creating a Language</a></li>
+<li class="toctree-l2"><a class="reference external" href="Jython.html#using-java-libraries">Using Java libraries</a><ul>
+<li class="toctree-l3"><a class="reference external" href="Jython.html#inheriting-from-java-library-classes">Inheriting from Java library Classes</a></li>
+</ul>
+</li>
 <li class="toctree-l2"><a class="reference external" href="Jython.html#controlling-java-from-jython">Controlling Java from Jython</a><ul>
 <li class="toctree-l3"><a class="reference external" href="Jython.html#inner-classes">Inner Classes</a></li>
 </ul>
     </div>
     <div class="footer">
       &copy; Copyright 2008, Creative Commons Attribution-Share Alike 3.0.
-      Last updated on Dec 29, 2008.
+      Last updated on Dec 30, 2008.
       Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 0.6.
     </div>
   </body>

File html/search.html

   
     <div class="footer">
       &copy; Copyright 2008, Creative Commons Attribution-Share Alike 3.0.
-      Last updated on Dec 29, 2008.
+      Last updated on Dec 30, 2008.
       Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 0.6.
     </div>
   <script type="text/javascript" src="searchindex.js"></script>

File html/searchindex.js

-Search.setIndex({desctypes:{},terms:{defaultcloseoper:[],orthogon:20,yellow:28,four:[13,35,12],secondli:19,prefix:28,sleep:[35,28],dirnam:[1,6],"00798f9c":27,browse_thread:7,gladiolu:31,evalscissor:22,whose:[16,21,11,22,28],selen:7,concret:[21,1,4],swap:[34,28],under:[20,10,11,1,12,2,16,34,7],testabl:1,worth:[21,10,4],lure:12,everi:[20,32,10,1,12,2,4,16,21,28,14,19],risk:29,inventfeatur:31,matchobj:6,rise:20,lurk:10,voic:[2,13,1],penchant:32,decorator_without_argu:14,govern:12,affect:[21,28],rare:20,disturb:[21,4],nestedshapefactori:4,metaclass:[27,14],decorator_with_argu:14,correct:[10,21,12],"__templatemethod":0,getdeclaredmethod:1,technolog:[13,1],verif:1,unpredictableperson:12,cappuccinowhip:19,c02:1,categori:[20,14,28],cmp:12,storag:27,"10f":21,direct:[20,9,10,12,4,14,35],sourceforg:[10,28],nail:21,second:[32,10,11,28,27,22,16,21,34,14],classcastexcept:16,ill:21,"__finditem__":10,even:[10,11,1,13,27,32,18,34,7,21,14,19],hide:[20,21,36],createshap:4,canvasheight:35,item1:22,weren:27,shallowai:11,firstdigit:12,"new":[20,32,10,0,1,12,2,3,15,4,22,16,13,11,6,31,7,21,8,19,35],net:[10,1,28,2,13,7],ever:[16,21,22],succumb:1,liberti:36,told:4,getsiz:28,widget:28,behavior:[20,10,11,28,12,27,22,16,21,36,14,35],never:[2,27,10,21,1],here:[1,2,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,27,28,30,32,35,36],"__hash__":12,debugg:7,gridlayout:28,path:[21,1,12,10,6,7,28],cardboard:21,interpret:[20,9,10,11,21],dry:19,sweeet:7,haschang:[28,12],credit:[13,9],errmsg:1,studi:[20,21,1,28,4],readlinesetup:10,portabl:[10,4],tremend:10,golden:20,argin4:10,"_test":6,brought:[7,32,10],substr:21,unix:30,ratsandmaz:35,wateron:10,total:[10,21,12],unit:[9,10,1],getchar:10,plot:28,redon:13,describ:[20,32,10,1,12,2,31,21,16,34,5,7,19],would:[32,10,0,1,12,2,28,4,16,21,11,17,27,14,19],quickpython:32,suit:1,call:[20,32,10,0,1,12,31,28,4,22,16,21,11,6,36,7,27,14,34],typo:13,recommend:21,type:[20,9,10,11,1,12,32,31,28,4,22,16,21,36,7,27,19],until:[20,10,11,12,31,21,32,6,18,14],looni:11,remark:[32,10,21],relat:[20,34],notic:[10,1,28,31,22,4,32,21,14],hurt:28,warn:[20,10,8,21],glass:21,flowervisitor:31,moin:14,hole:1,hold:[10,11,12,13,21,16],unpack:[10,21],must:[10,11,1,12,2,31,28,4,22,32,21,5,35,36,7,27,14,19],join:6,err:[21,1],setup:[7,1,4],work:[20,9,10,21,1,28,32,2,8,4,22,16,13,34,6,7,27,14,19,18],worm:31,contentpan:[],root:[21,1],overrid:[21,0,1,28,12,32,7],give:[20,10,1,30,2,21,32,13,7,14,35],digit:12,indic:[9,10,29,12,21,4,32,28,14],doublevalu:21,setvis:[35,28],unavail:12,unassign:7,david:[20,32],addtobin:21,end:[20,10,11,28,2,22,32,13,21,8,35],quot:32,ordinari:[21,10,1,28,4],classifi:[20,9],revisit:[21,4],how:[20,32,10,11,1,28,2,31,15,4,22,16,13,7,27,21,19],hot:19,disappear:[18,35],env:1,answer:[7,21,1,22],verifi:[10,1],changeinterfac:36,perspect:[20,21],"void":[10,1],updat:[29,28,6,7,8,35],my_new:27,recogn:[],lai:1,mess:2,coffeeshop:19,after:[20,10,11,1,12,8,27,32,21,35,7,14,19],implementation1:34,lump:34,implementation2:34,diagram:[9,21,12,13,34,7,8,19],befor:[20,32,21,11,1,12,2,16,28,14,19],wrong:[21,10,1],beauti:[21,34],law:20,parallel:[20,3],demonstr:[10,0,1,28,12,31,22,32,34],beanmeup:19,chere:7,profess:17,attempt:[20,21,1],third:21,classmethod:27,revolv:20,exclud:1,wink:0,maintain:[20,21,11,12,13,22,35,14,19],environ:[7,31,21,4,30],incorpor:[10,11,14,1],enter:[10,14,28,12,35],lambda:[],someplac:7,order:[32,10,0,28,12,2,4,16,21,11,5,7,8,19,34],oper:[20,9,10,11,32,12,31,15,4,22,16,21,7,14],composit:20,os_walk_comprehens:6,over:[20,32,10,11,1,2,21,16,14],fall:[14,1,30],orang:28,becaus:[20,32,10,21,1,12,2,31,27,16,13,34,36,7,28,14,18],paperscissorsrock:[31,22],flexibl:[20,9,10,11,12,22,32,21,37,19],vari:[20,11],fit:[20,21,11,1,28,2,34],fix:[27,28,29,13,31,21,7,8,19],avocado:19,"__class__":[31,10,11,22,19],bytecod:10,better:[20,10,11,1,12,2,21,13,28,14],imp:[16,34],blemang:32,comprehens:[9,6],hidden:[32,21,0,34],schmidt:21,easier:[20,10,1,12,31,5,7,28,14],glassbin:21,them:[20,32,10,11,1,28,2,31,22,16,13,35,6,7,21,14,19,17],thei:[20,32,10,11,1,12,2,31,27,16,13,6,36,28,21,14,19],proce:7,safe:[16,9,10,14],stringformat:32,"break":[21,1,29,19,35,6],promis:21,setvalu:21,"instanceof":21,choic:[21,11,28,2,31,4,22,13,35,7,19],grammat:2,alex:27,brough:[],getvalu:[10,21,12],closeobserv:28,each:[20,9,10,0,1,12,31,28,4,22,32,21,11,35,6,27,8,19,34],debug:[10,8,29],side:[7,13,10,21,1],mean:[20,32,21,11,1,12,13,31,16,34,28,14,19],prohibit:21,setdefaultcloseoper:28,nochang:12,enorm:14,arduou:19,taught:11,makecharact:4,receptacl:21,collector:10,whip:19,goe:[13,32,21,19],langug:10,gof:[20,11,34],content:21,rewrit:[21,2,14,16,13,34,36,7,8,19],dsl:10,vector:[20,21,35,12],adapt:[7,9,21,36],reader:[9,1,13,16,32,5,18],got:[13,1,36],washer:12,forth:10,linear:20,barrier:20,written:[32,11,1,28],situat:[32,27,10,21,1],free:[7,13,20,12],standard:[20,10,11,1,28,32,14],ncpu:30,println:[21,10,1],mousemovegener:12,quickinstal:7,sheet:[7,1],kit:10,acrobat:7,uiuc:21,puzzl:4,angl:20,openssh:7,mvc:28,isn:[20,10,0,28,2,21,32,34],subtl:[20,21],onto:20,bite:1,rang:[10,0,28,31,4,22,32],isassignablefrom:1,gradi:21,hoop:14,independ:[20,21,28],wast:[32,4,28],restrict:[2,10,14,27,28],"__tojava__":10,unlik:[32,21,11,1],alreadi:[20,10,11,1,28,2,21,16,7,35],wrapper:[10,21],wasn:21,getmemb:6,thick:4,agre:32,primari:[3,21,11,1,31],hood:10,brillig:10,vendingmachinetest:12,rewritten:[13,18],"__implement":34,spinach:19,top:19,sometim:[20,10,0,13,21,36,7,14],cardboardbin:21,rsrc:28,gnureadlin:10,master:[10,21,12],too:[20,10,1,13,21,33,18,14,19],similarli:10,consol:[10,1],tool:[9,10,11,1,12,2,4,13,7,28,21,8],propon:21,getcontentpan:28,somewhat:2,technic:13,trek:27,silli:21,target:[10,28],keyword:[32,10,4,28],provid:[20,32,10,0,1,12,28,4,16,21,11,36,7,27,14,19,34],"__onlyon":27,tree:1,hors:32,prong:21,project:[20,9,10,1,2,31,21,13,17,7,8,35],matter:[13,20,21,11,4],pressur:1,foamedmilk:19,fashion:[32,21,14],mind:[13,27,1,6],mine:7,raw:32,aforement:20,cohes:[20,21],"__main__":[27,1,28,10,32,6],seen:[20,32,10,11,28,12,2,4,16,34,14],seem:[20,10,1,12,14,4,32,21,34,8],seek:[21,12],seminar:2,innerclass:10,realm:[16,20],respectjavaaccess:10,terrif:10,latter:[20,10],cope:21,thorough:10,alreadyopen:28,staticinnerclass:10,client:[21,0,1,12,2,34,36],alldecor:19,thoroughli:2,wherebi:12,simplifi:[7,27,4],shall:[10,11,1],bruce:7,glob:[10,1],object:[20,9,10,11,1,12,32,8,28,4,22,16,21,34,5,35,36,31,27,14,19],deleg:[27,34,21],regular:[32,10,1,19],letter:0,phase:[20,21,14],coin:11,brien:21,tradit:20,simplic:[20,31,10,12,32],don:[20,9,10,21,28,2,3,4,22,32,13,33,34,36,7,14,18],simplif:10,pythoninterpreterset:10,doc:7,flow:[13,10],doe:[20,10,11,1,12,8,28,4,32,21,0,27,14,29,34],bash_profil:7,dummi:11,declar:[32,1],wildcard:10,itemslot:12,notion:34,dot:10,marvel:32,has_kei:[21,4,12,30],endear:10,visitor:[20,9,21,1,28,31],"__str__":[31,27,11,22,12],random:[20,21,28,31,4,22],syntax:[10,1,27,32,21,5,14],"2008v1":7,involv:[20,27,15,21,16,7],despit:21,layout:[2,13],acquir:28,menu:[7,15,4,19],explain:[34,14,1,4],configur:[9,10,28,12,13,22,21,7,37],restaur:19,sugar:14,theme:11,busi:31,"__call__":[27,11,14],priveledg:[],oct:10,edict:31,cappuccino:19,vener:7,stop:[21,1],next:[10,11,1,12,4,16,21,27,35],on_mouseup:28,report:[7,1,35],rosettacod:11,bat:10,bar:[13,3,27],isopen:28,emb:[32,10],baz:3,shape:[21,4],method:[20,9,10,0,1,12,31,28,4,22,32,21,11,6,36,27,14,19,34],twice:[1,28],bad:[13,4],steam:19,fair:11,decoratortalk:14,elimin:[10,21],mandatori:20,result:[20,32,10,11,1,28,21,16,6,14,19,35],respons:[9,21,0,12,32,11,35,19],fail:[21,10,14,1,12],themselv:[20,32,28],bee:[31,34,28],hammer:21,best:[20,10,2,32,13,7,14],brazil:2,awar:[21,10,4,28],said:2,alsum:21,databas:27,hgrc:7,red3d:35,discoveri:[20,21],figur:[2,13,10,21,30],emptor:18,simplest:[20,27,10,1,28],awai:[20,21,19,12],getkei:10,approach:[20,9,10,28,12,31,4,16,21,36,7,27,14,19],attribut:[2,14,10,5,20],accord:[16,21,1],extend:[16,31,21,1,4],xrang:10,weak:32,extens:[7,13,10,21],lazi:[27,34,12],preprocessor:14,backgroundcolor:28,rtti:[9,21],aparat:21,protect:[10,34,1,28],accident:[20,21],expos:[21,36],howev:[20,32,10,11,1,12,13,31,28,4,16,21,34,5,35,36,7,27,14,19],pitt:14,against:[31,10,14,21],logic:[20,28,19],countri:11,com:[20,10,1,12,13,21,16,7,14,35],con:19,compromis:[9,19],kwd:27,notifyobserv:28,elf:31,excess:12,coconut:32,"2nd":10,diff:7,guid:[7,9],assum:[7,32,27,21],panel:28,duplic:[20,6],light:10,testsynchron:28,three:[20,10,12,31,14,19],been:[20,10,21,28,12,2,27,32,13,34,18,14],chrysanthemum:31,much:[20,10,21,1,28,2,3,4,32,13,31,7,14,18],interest:[20,10,1,28,2,27,21,14],basic:[20,9,10,1,12,2,4,32,16,21,34,36,28,14,19],"__doc__":6,"__len__":10,quickli:[10,12],life:28,rather:[32,10,1,28,30,13,31,4,16,21,34,36,14,19],deeper:[21,10,4],getval:10,xxx:30,isfunct:6,dave:16,alreadyclos:28,bookstor:2,ugli:[21,36],exception:[32,10],ident:[27,36,21,12],occam:20,gnu:1,servic:[2,13],properti:10,commerci:[13,10],air:[4,12],employ:2,calcul:[11,28],aid:32,vagu:20,dizzi:20,enlev:20,seconddigit:12,player:28,kwarg:[5,6],indent:[13,32,6],tediou:[10,28],sever:[21,4,12],valgen:10,quand:20,perform:[20,10,11,1,12,31,4,22,21,0,28,14,19],suggest:[20,27,1,13,21,32,7],make:[1,2,4,5,6,7,8,9,10,11,12,13,14,17,19,20,21,22,27,29,28,31,32,34],transpar:[10,1,19],complex:[9,10,11,1,28,4,6,14],descend:1,tackl:21,complet:[20,10,1,12,21,34,7,28,14,35],inheritor:28,blue:28,listperform:37,hand:[20,32,27,11,28,13,4,16,21,14],fairli:[20,21,1,28,10,22],nix:10,rais:[2,21,12],garlic:19,refin:[10,8,21],techniqu:[27,3,21,4,16,31],qualif:10,jframe:28,kept:[2,1],thu:[20,32,10,11,1,12,4,22,16,21,0,14,19],getbyt:35,inherit:[20,9,10,11,1,12,28,4,32,21,0,27,19],runtimeexcept:[16,12],academia:11,shortli:[32,1],greatest:[20,21],thi:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,18,19,20,21,22,27,28,29,31,32,33,34,35,36],programm:[20,9,10,0,1,12,2,27,32,34,36,14],everyth:[10,28,30,2,21,32,13,18,14],isomorph:20,left:[20,21,28,13,31,15,6,7],agon:2,identifi:[7,32,10,4],setcolor:[35,28],just:[20,10,11,1,12,30,2,28,4,22,32,13,34,5,6,7,27,21,14,19,18],"__dict__":[27,5,6,28],kdiff3:7,yet:[32,10,1,28,13,27,16,21,6,18,35],languag:[20,9,10,11,1,12,3,4,32,21,33,6,14,29],previous:[21,4],easi:[20,10,1,22,32,21,7,19],had:[20,32,21,11,1,12,2,31,16,35,14,19],keyset:[10,21],spread:[4,22],prison:35,falter:1,els:[20,10,1,12,30,27,32,21,6,7,35],functionobject:11,explanatori:10,gave:[2,21],applic:[20,9,10,0,12,4,34,7,14],larman:36,mayb:[13,8,1],ajout:20,background:28,elabor:21,shadow:20,unten:14,readlineconsol:10,apart:20,maxval:10,specif:[20,10,11,1,12,4,16,21,34,7,28,8],arbitrari:[32,21],nudg:0,hunt:[21,35,28],manual:[21,22],doubledispatch:21,tymciurak:7,night:[2,10],ocbox:28,unnecessari:[10,34,4,12],singletonpattern:27,underli:20,www:[20,32,10,11,1,12,21,16,7,28,14,35],right:[20,10,28,13,2,21,32,18,6,7],old:21,deal:[21,10,22,36],printf:32,interp:10,somehow:[10,34,21],percentag:2,intern:[16,21,1,4],borg:27,unless:[2,34,1,6],indirect:21,successfulli:[7,21,1],atteint:20,txt:[35,12],clash:21,bottom:[32,11],subclass:[9,10,12,4,21,19],suffici:10,condit:[9,11,1,12,4,32,35],foo:[13,3,10,14,27],core:[7,32,10],sensibl:[4,22],steamedmilk:19,confer:[2,13,21],promot:[2,21],repositori:2,pylist:10,post:[7,14],"super":[27,28],meyer:35,chapter:[32,10,11,1,2,8,21,16,13,33,35,37,14,19],unpackag:10,alexand:16,eat:31,getparametertyp:1,slightli:[9,12,1,28,5,14],py2float:10,surround:[32,21,35,28],unfortun:10,commit:[7,8],produc:[20,10,21,1,12,2,31,4,22,16,13,36,14],makeobstacl:4,dilemma:[31,21],thermostat:10,javac:10,curiou:18,basenam:6,"float":10,encod:22,bound:[2,31,10,21],mocha:19,down:[10,11,1,28,4,35,19],creativ:[2,21,17],weightvisitor:21,bizarr:14,cappuccinodecafwhip:19,wrap:[27,11,28,21,16,14,19],opportun:21,clearchang:28,javax:[],testdumpclassinfo:10,east:35,accordingli:13,wai:[20,10,11,1,12,30,2,31,28,4,32,13,34,5,36,7,27,21,14,19,29],frustrat:10,support:[9,10,1,12,2,3,4,32,21,17,7,28],evalpap:22,why:[20,21,14],avail:[20,10,11,1,2,21,32],stuck:[10,1],reli:[16,21,5],editor:[7,13],fork:7,head:[20,11],medium:20,autonom:35,form:[20,9,21,1,28,2,15,4,16,32],offer:19,forc:[20,32,1,28,2,4,16,34,6],forg:1,heat:12,hear:1,dead:35,heap:[21,34],hashtabl:[],"true":[21,1,12,10,4,32],analyst:21,"6dd415847e5cbf7c":7,entryexit:14,pragu:21,setsuccess:11,maximum:[20,32],tell:[10,11,1,12,4,32,21,7,35],singletonmetaclass:27,absenc:1,fundament:[11,20,0,1,32],trim:21,classif:20,featur:[20,21,1,2,15,32,33,7,14],setxi:35,semicolon:32,classic:[21,12],howdi:10,stronger:32,"abstract":[20,9,21,4,36],flaw:1,sale:2,exist:[16,21,0,4,6],door:12,cleverli:13,mold:[21,36],trip:2,assembl:19,inde:[27,10,21,14,1],surpris:[32,14],excel:16,refactor:[9,21,1,29],tij:37,test:[20,9,10,11,1,12,21,18,6,7,28,8],tie:20,presum:[21,4],smell:12,realiti:10,getsizetupl:28,notif:[20,28],intend:[2,10,1],felt:10,intent:[16,20,31],consid:[20,9,10,11,1,22,21,34,35,14,19],bitbucket:[7,9,8,29],receiv:[10,14,28],longer:[13,32,21,14,19],furthermor:11,intimaci:21,ignor:[21,27,1],inexpens:21,time:[20,32,10,0,1,12,2,28,4,16,13,11,35,27,21,14,19],push:7,backward:[35,29],osx:[7,30],concept:[20,9,10,0,11],chain:[9,11,12],nextstat:12,skip:1,consum:[10,5,19],focus:4,invent:[10,34],cafelattedecaf:19,objcount:1,milk:19,row:[28,12],decid:[21,12,28,31,10,4,32,34,19],depend:[20,21,29,12,10,4,28,8],decim:32,intermedi:2,certainli:[20,21,12,28,4,34,19],decis:[13,16,35,32],jvm:10,mainloop:28,jtextarea:10,isinst:[16,30],"__metaclass__":27,sourc:[20,10,1,12,2,21,13,7,28,35],string:[9,10,11,1,12,4,32,21,28,35],brazillian:2,onlyon:27,"fa\u00e7ad":[9,36],broadli:21,word:[11,1,12,0,36,14],exact:[21,4,12,22],valuabl:21,level:[20,21,1,28,4,32,6,14],did:[32,6],die:35,gui:[0,4,28],iter:[20,9,10,1,12,4,32,16,21,26],vein:14,item:[28,10,4,12,22],team:[2,7,29,9],quick:[9,10,1,32,7,19],round:34,dir:[10,1,6],dict:[27,10,5,6],prevent:[9,21,1,28,4,34],plaincap:19,paintcompon:28,htm:35,compens:20,sign:[7,10,8],bondag:14,cost:[20,19,12],cafelattewetwhip:19,patient:10,corba:10,appear:[20,10,11,1,12,13,8,28,4,32,21,27,14,29],filler:21,scaffold:4,current:[20,32,10,1,12,21,16,8,35],suspect:4,newalgorithm:11,shapefact2:4,deriv:[21,12,1,28,10,4,32,34],cappuccinodri:19,gener:[1,2,4,6,7,8,9,10,11,12,14,16,35,20,27,22,26,21,29,28,31,32,34,36],satisfi:[20,21,11,12,34],modif:[21,14,19],chainlink:11,address:34,along:[20,32,10,1,12,21,16,34],viabl:20,teacher:17,wait:[28,10,21,12],box:[9,1,28,4],messengeridiom:5,nextb:12,alti:28,shift:6,queue:11,behav:[10,14,21,12],extrem:[7,21,10,14,1],commonli:[10,21],trashtyp:21,semant:[32,1],regardless:[21,34],mazegen:35,extra:[32,28,21,1,19],activ:[13,31,21,4],modul:[32,3,10,14,28],prefer:13,toarrai:10,visibl:[],codemark:6,instal:[9,10,1,28,21,7],forefront:1,gsum:21,anounc:7,red:[35,28],newslett:20,prove:[21,14],univers:[20,4],visit:[31,21],recycleap:21,subvers:10,everybodi:28,live:10,handler:28,msg:32,scope:32,checkout:[7,8],testid:1,trustworthi:6,testpyutil:10,afford:11,peopl:[20,21,1,29,2,31,32,13,17,7,14],claus:[32,28,4,12],clue:21,visual:[7,9,28,13],appendix:2,rigid:10,oop:[20,21,1,28],examin:[10,21],obj:[16,32],jlabel:[],effort:[9,10,11,1,2,21,17],easiest:[7,9,10,31],fly:31,graphic:[35,1,28,4],prepar:14,dmitri:27,battl:[31,4],focu:[13,3,21],flowlayout:[],problemsolv:11,can:[1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,27,28,31,32,34,35,36],purpos:[20,21,11,4],problemat:16,claim:11,encapsul:[20,9,21,11,12,4],stream:10,predict:14,wrapped_f:14,statet:12,backslash:[32,10],topic:[2,32,27],heard:21,chih:27,abort:[1,6],proxydemo:34,recycl:[9,21],simul:[20,9,21],occur:[20,21,11,1,12,13,4,22,28],pink:28,alwai:[20,27,0,1,29,10,32,21,8],killanddismemb:4,variou:[20,10,11,1,12,31,4,22,21,0,19],distinctli:12,ping:10,write:[20,9,10,0,1,12,2,4,32,16,13,11,6,28,21,34],anyon:[2,35],pure:[10,12],"0x00798900":27,parameter:21,ensconc:10,map:[10,12,31,21,32,35],product:[13,32,10,1],modal:[],book:[20,9,27,0,1,2,8,4,32,13,11,17,36,31,7,21,14,35,18],max:28,thermostatdai:10,gradient:20,spot:[13,4],usabl:12,wantmor:12,inputb:12,inputc:12,mac:7,inputa:12,mymethod:28,aop:14,mai:[20,32,10,11,1,12,2,28,4,16,13,33,35,7,27,21,19],underscor:[13,32,27],data:[9,10,11,28,12,4,32,16,21,5,27],grow:33,newlin:32,my_login:7,practic:32,johnson:20,secur:[10,14],explicit:[20,11,14,22],cafelattewhip:19,inform:[10,11,1,12,30,8,28,4,22,32,21,5,7,27,14,35],"switch":[21,11,35,34],preced:19,combin:[9,10,11,28,2,22,19],gamma:20,callabl:[14,28],talk:[7,20,10,21],vike:32,extractor:[8,1],dojo:17,mouseact:12,countobserv:28,greenhouselanguag:10,brain:[32,11],lst:10,codemanag:6,still:[20,10,21,28,12,2,4,32,13,6,7,8],skeleton:34,stringlist:21,dynam:[20,9,10,11,28,31,4,22,32,21,34,14,19],rosetta:17,group:[20,21,11,28,2,31,32,6,7,35,17],thank:[9,29],polici:0,jim:[21,11],platform:[9,10,30],window:[9,10,30,13,15,7,8],curli:32,borgsingleton:27,jtextfield:10,ddtrash:21,non:[20,10,1,2,21,32],dispens:12,halt:1,halv:32,sysconf_nam:30,alist:7,initi:[20,10,0,28,12,4,21,34,7,27,8,35],sorter:21,underneath:7,typedbinmemb:21,pyinteg:10,aesthet:21,therebi:1,half:34,javaclassinpython:10,now:[20,10,1,12,31,4,21,35,7,14,29],discuss:[20,21,35],introduct:[2,7,14,32,9],term:[20,21,11,1,12,34,36,14],name:[20,10,0,1,12,13,28,4,22,32,21,34,5,6,7,27,14,19],ppr:21,getweapon:31,didn:[20,32,8,1],oliv:19,phyast:14,separ:[20,10,0,1,12,31,4,32,21,11,7,28,34],rock:22,cafemochadecafwhip:19,pizza:19,compil:[20,10,11,1,28,21,32,34,6,18,14],domain:10,replac:[10,11,1,13,31,32,14],individu:[7,21,35,19],arg3:14,continu:[21,1,12,10,32,6],ensur:[7,20,34,1,6],parsetrash:21,significantli:14,begun:20,year:[16,20,21,1],happen:[20,10,21,1,12,2,4,13,28,14,19],dispos:10,troll:31,shown:[20,21,11,31,10,4,32,19],accomplish:[21,28,10,32,34,36,27],cafemochawhip:19,"3rd":[16,19],space:[21,13,10,32,34,6,35],profit:[2,10],antoin:20,internet:[1,35],returnstr:10,factori:[20,9,21,12,4,36],overidden:12,earlier:21,"goto":21,occupi:32,getcwd:1,argu:[13,3,16,14,20],argv:6,lab:21,org:[10,11,1,29,14,32,7,28,8],"byte":[10,35],care:[13,32,21,4],reusabl:[16,21],couldn:[21,11,1],yarko:[7,8,29],synchron:28,recov:21,thing:[20,10,11,1,28,2,22,32,13,34,7,21,14],place:[32,10,21,1,12,2,4,16,13,5,17,7,28,14,19,18],greenhous:[37,10],principl:[20,9,21,1,12,36],think:[20,32,10,11,1,28,2,22,16,21,7,14,19],frequent:21,first:[20,9,10,0,1,12,32,28,4,22,16,21,34,6,36,7,27,14,19,35],origin:[10,1,28,14,21,16,35,8,19],directli:[27,0,1,2,10,32,21],carri:[21,11,12],onc:[20,10,28,21,6,7,14,19],arrai:[20,21,12,10,4,32,36,35],getcost:19,crib:30,yourself:[10,12,2,21,32,7],fast:[13,32,10,1],ring:10,open:[10,0,1,12,2,21,13,6,7,28],size:[2,28,1,19],given:[21,0,12,28,10,4,34,35],"__subclasses__":[31,4,22],width:[35,28],teardown:1,caught:12,clip1:21,plastic:21,necessarili:[13,0],circl:[4,12],showdigit:12,white:[9,21,1,28],conveni:[27,28,13,10,4,34,19],cite:35,includ:[20,32,10,28,1,12,15,27,16,21,17,7,29,14,19],simionato:14,changeneighbor:28,especi:[20,21,29,10,32,17],copi:[21,12,28,2,34,6,7],specifi:[10,1,12,2,4,32,7],broadcast:12,newcolor:28,enclos:19,enigma:21,changeavail:12,holder:21,than:[20,32,10,11,1,28,13,31,4,22,16,21,34,14,19],png:7,serv:[20,4],setattr:27,min:28,applet:0,were:[21,1,12,10,4,32,14],posit:[35,28],surrog:[11,36,19,34],seri:14,analysi:20,sai:[20,32,10,11,28,12,13,31,22,16,21,0,6,7,14],jythonc:10,nicer:[7,36,28],svnroot:10,argument:[20,9,10,11,1,12,4,32,21,5,28,14],ant:10,prt:10,larri:21,deliv:10,breakfast:28,kevin:28,leastsquar:11,engin:[31,0,1],squar:[4,28],patternrefactor:[21,11],note:[1,4,6,7,14,9,10,11,12,13,15,16,18,19,20,21,27,29,28,32,33,34,35],altogeth:[20,21],ideal:10,take:[20,32,10,0,1,12,2,31,28,4,16,21,11,36,7,27,14,19,29],green:28,noth:[20,21,11,1,28,13,35],begin:[20,10,29,13,21,32,7,14],sure:[2,32,10],trace:[14,1,28],normal:[20,27,11,1,31,10,4,32,21],track:[21,12,28,2,34,5],price:[2,21,19,12],setchang:28,beta:10,pair:[21,36],neatli:34,televis:27,latex:[7,13,8,29],synonym:20,later:[20,27,11,1,4,21,7,14,19],drive:0,quantiti:[28,27,21,12],addbranch:7,runtim:[9,10,11,4],parseint:28,quiescent:12,shop:[2,19],shot:[21,19],linedata:11,show:[20,32,10,11,1,13,3,15,4,16,21,6,7,27,14],cheat:7,cheap:[20,21],subprocess:10,mousetrap2test:12,concurr:[3,9],permiss:[10,1],hack:[7,8],ground:10,xml:[10,36],onli:[0,1,2,4,6,7,14,10,11,12,13,16,19,20,21,22,27,28,31,32,34,36],explicitli:[32,21,10,14,4],nexta:12,fenc:20,nextc:12,transact:20,observedflow:28,enough:[10,1,28,13,21,4,7],doubleespresso:19,printstacktrac:[21,1],black:[9,1,28],analyz:20,jaroslav:21,clearselect:12,startswith:6,proxy2:34,nearli:1,viewpoint:21,get:[18,9,10,11,1,12,2,31,20,22,32,16,13,6,36,7,28,21,14,19,17],ddaluminum:21,cannot:[20,32,10,0,12,31,27,16,21],ssh:7,afunct:14,gen:4,requir:[20,32,10,1,12,4,16,21,33,5,6,36,7,28,14,19],truli:10,prime:[21,1,28],reveal:35,isemptyxi:35,aluminum:21,dramat:1,yield:[3,31,4,22],spameggssausageandspam:10,expedi:1,pynam:10,scott:20,where:[20,10,11,28,12,2,4,22,32,18,5,6,7,21,14,35],vision:2,summari:[9,10,21],wiki:[10,11,29,21,7,14],balabanov:27,pydictionari:10,booch:21,cafelattewet:19,testcas:[],rmi:34,purest:11,concern:[21,14,1],timeit:10,detect:[21,22,35,30],charat:10,review:[7,9,14,1],enumer:[16,6,12,22],label:[8,29],getattr:[27,34],trashbinset:21,between:[20,10,1,12,21,34,7,28],"import":[20,10,0,1,12,2,3,4,22,32,13,5,6,31,28,21],item2:22,across:[10,4],aslist:10,assumpt:[31,21],parent:7,tup:10,screen:[21,0,1,28],inflex:19,cycl:32,pythoncardapp:28,findminima:11,come:[20,10,1,12,2,28,4,32,21,6,7,27,35],pythoncard:28,tug:7,newbyt:35,pepperdew:19,quiet:21,contract:2,inconsist:14,improv:[9,27,29,12,2,21,32,13,7],somecondit:1,minima:11,color:[13,35,28],overview:[7,9,21],unittest:[21,10,1,12],period:32,dispatch:[9,21,28,31,4,22],colorbox:28,jeremi:35,colon:[32,10],exuperi:20,mousetrap:12,coupl:[20,9,21],games2:4,west:35,rebuild:10,mark:[20,32],appframework:0,quiesec:12,reflex:20,procedur:21,runal:12,spare:32,emphas:[13,21,10,4],nameless:[],trantabl:12,cafelatteextraespresso:19,findal:6,lectur:17,"__eq__":[22,12],former:[16,27],those:[20,10,1,28,2,4,22,32,21,5,17,7,14],ispubl:1,sound:[2,14],myself:[14,17],tostr:10,keygen:7,trick:[10,5,21],cast:[10,21,36],invok:[10,1,22,32,21,7,14,19],outcom:[4,22],invoc:19,anytim:[13,28],advantag:[16,21,10,27,12],stdout:10,canon:[9,15],ivi:7,worri:[2,13,16],endswith:6,eras:[1,4],myapp:0,couplet:21,shutil:6,fame:21,"__init__":[32,10,0,1,12,35,28,4,22,16,21,11,5,6,36,27,14,19,34],develop:[20,9,10,1,2,13,7],author:[11,28],blackboxtest:1,same:[20,32,10,11,1,12,13,28,4,22,16,21,34,27,14,19],check:[10,1,12,28,4,32,21,6,7,27,8],binari:7,html:[21,29,13,14,32,6,7,8],testrunn:[],customize1:0,pai:[2,10,21],document:[10,1,28,13,8,32,7,14],martelli:27,number_of_processor:30,nest:[32,27,4,19],foam:19,someon:[7,8,28],driven:[37,9,1,12,35],mani:[10,1,12,2,27,32,21,7,28,14,19],extern:[9,21,1,12,6],tosynch:28,tradition:[32,1],hummingbird:28,appropri:[20,10,11,1,12,31,4,32,21],macro:[9,11,14],facad:36,pep8:13,gameenviron:4,without:[20,9,10,21,1,28,2,4,32,16,13,7,14,19],model:[20,31,21,28,19],dimension:[36,12],arrays2:32,execut:[9,10,11,1,28,4,22,32,21,7,14],tip:7,thermostatnight:10,rest:[20,10,0,1,12,2,4,21,6,7,14],recyclea:21,aspect:[20,10,14,4,28],recycleb:21,touch:[31,21],monei:[2,12],flavor:11,speed:10,pythondecoratorlibrari:14,except:[10,0,1,12,22,21,14],littl:[20,10,1,12,21,32,7,14,35],blog:7,pile:20,treatment:21,exercis:[9,10,11,1,12,31,28,4,21,0,17,36,27,19],frontmatt:8,mouseclick:28,real:[10,11,35,34],around:[20,21,1,28,13,31,4,32,34,5,35,14,19],todolist:[8,29],"0079ef2c":27,repaint:[35,28],grid:28,pop:[10,21],amp:[3,1],rununittest:1,appetit:20,returnarrai:10,mod:35,saniti:1,yearli:21,stranger:20,vend:[9,12],chainofrespons:11,integ:[32,10,28],benefit:[10,28,2,21,32,13,34,19],either:[20,10,11,28,22,32,19],output:[10,0,1,12,13,8,27,32,29,7,14,19],margherita:19,manag:[20,10,11,12,28,31,27],fulfil:[20,11,34],tulach:21,satisfactori:21,adequ:[20,32],constitut:28,nonzero:1,regina:19,slice:10,mood:12,chronicl:20,boxobserverpythoncard:28,definit:[21,0,1,2,10,32,34,14],evolv:[13,20,10,21,1],exit:[35,14,1,28,6],inject:[10,14],complic:[21,34,1,19],ratcount:35,refer:[20,27,21,1,12,2,4,22,32,13,34,35,7,19,18],power:[7,21,10,14,27],pythoninterpreterget:10,garbag:[10,1],inspect:[7,6],typedbin:21,standpoint:1,"__name__":[10,11,1,28,31,4,22,32,6,14,19],"throw":[16,10,1,12,4],comparison:[10,4,12],central:[16,21,12],greatli:21,max_num:21,firstnam:7,conditionc:12,panna:19,splitlin:6,currentlin:35,stand:[20,31,21,34],neighbor:28,act:[20,21,11,14],routin:34,effici:21,lastli:[16,10],val2:32,quietli:10,"75f":19,strip:[21,19,1,12,6],counterintuit:21,your:[0,1,2,4,6,7,9,10,11,12,13,15,16,19,20,21,22,27,28,30,31,32,34],wustl:21,log:28,aren:[13,20,36,1,32],commenttag:6,overwrit:6,hee:34,stealth:10,interfac:[20,9,10,11,28,12,31,4,32,16,21,34,36,19],low:[20,21],lot:[20,10,1,12,2,21,32],pollin:31,strictli:21,unam:10,svn:10,tupl:[32,10,5,22],bundl:36,regard:20,vendingmachin:12,stepanov:16,conciev:12,"0076aa3c":27,functor:11,mice:12,conclus:16,faster:[10,1],notat:10,tripl:32,jc2:10,impenetr:1,possibl:[20,10,21,1,12,2,4,32,13,34,35,27,14,19],"default":[21,11,1,28,30,7,35],asynchronizedmethod:28,grasp:32,embed:10,clone:[7,21],expect:[20,10,21,22,32,18,14],gone:[10,11],creat:[0,1,2,3,4,5,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,27,28,29,31,32,34,35,36],certain:[21,10,15,19,12],strongli:32,intro:8,file:[9,10,0,1,12,13,15,21,32,11,6,7,28,8,35],jargon:31,rearrang:16,cream:19,incorrect:16,again:[2,21,10,1,32],setval:10,googl:7,want:[20,32,10,11,1,12,2,28,4,22,16,13,34,5,36,7,27,21,14,19,29],discrimin:32,my_decor:14,compel:[20,10,6],awt:[],orient:[20,21,11,10,4,32,14],idiom:[20,9,11,28,24,34,7],valid:1,compet:22,elementat:35,you:[0,1,2,4,5,6,7,14,9,10,11,12,13,15,16,18,19,20,21,22,27,28,30,31,32,34,35,36],getdescript:19,inneradapt:36,architectur:[2,20,10,28],check_result:6,critic:10,registri:10,sequenc:[20,32,10,11,12,21,16],tbin:21,vocabulari:20,pool:27,reduc:[1,19],bulk:[13,21],differentreturn:32,opennotifi:28,directori:[10,1,13,21,6,7,8],descript:[27,1,12,21,6,7,19],showmsg:32,lighton:10,mass:28,potenti:[20,28],escap:12,cpu:30,represent:12,all:[0,1,2,4,6,7,14,10,11,12,13,16,18,19,20,21,22,27,28,31,32,34],dist:10,consider:[9,21,19],messi:[21,22,30],recip:9,lack:[10,1],dollar:12,sanitycheck:1,monti:32,abil:[20,28,2,31,13,14],follow:[20,10,21,1,12,2,4,22,32,13,34,5,7,28,14,19],princ:20,unclassifi:21,edong:7,"__cmp__":[10,12],init:0,program:[20,9,10,11,28,1,12,32,2,15,4,22,16,13,6,27,21,14],hasattr:30,rstrip:6,cgi:[32,21],introduc:[20,10,1,2,21,13],"case":[32,10,11,1,28,2,4,22,16,21,34,5,27,14,35],liter:[32,22],straightforward:[20,10,21],fals:[21,10,6,12],checkin:[7,8],faq:7,util:[32,10,1,28,16,7],defvar:7,candid:[16,20],mechan:[9,21,0,13,22,16,32,11,14,34],failur:[20,11,1],veri:[20,9,10,11,1,28,2,4,22,32,13,7,27,14,35],bruceeckel:[7,16,10,20,1],lisp:14,list:[20,9,10,0,1,12,2,8,4,22,32,21,11,5,6,7,28,14,29],signific:[13,16,21,1,35],emul:28,small:[2,13,20,19],everth:15,dimens:28,pyobject:10,tea:19,tee:34,tex:7,zero:[10,1],shapefactori:4,design:[20,9,10,11,1,12,13,31,28,4,32,16,21,34,6,36,27,14,19],pass:[10,11,1,12,31,28,4,22,32,21,34,5,36,7,27,14,19],whene:34,further:[9,10,1,28,13,3,21,32,14],new_f:14,what:[1,2,3,4,6,7,14,9,10,11,12,13,16,18,19,20,21,27,28,32,34,36],sub:6,ntotal:21,hashset:10,abl:[20,10,0,1,12,2,4,22,16,13,11,21,35,34],brief:32,overload:[32,10,21],version:[10,21,28,12,2,8,4,22,32,13,36,7,27,14,18],succinct:14,fillbin:21,"public":[20,10,1,2,21,13],contrast:32,movement:[20,21,11],hasn:[21,28],full:[7,32,10,34,6],hash:[16,32,12],variat:[20,27,36,21,12],sophist:[32,10,1,4],rlock:28,shouldn:[7,11],trunk:[7,9,10],demet:20,rudimentari:32,modifi:[10,21,1,12,2,31,28,4,22,32,13,7,27,14],valu:[10,1,12,22,32,21,5,36,14],search:[9,21,0,1,32,7],upcast:[21,4],ahead:[32,1],vegetarian:19,popen:10,prior:21,amount:[21,11,1,12,15,10],"0076daac":27,pick:21,action:[20,9,10,11,12,4,21,34],introductori:[2,7,14,32,9],scurri:35,pytupl:10,via:[2,7,10,21,22],shorthand:[],primit:[10,21],transit:[9,12],"while":[20,10,11,1,12,2,21,32,34,35],readili:20,filenam:[21,6,35],inappropri:[10,1],ystart:35,famili:[21,11,22],establish:[16,32,21,1,12],jbutton:[],select:[20,9,10,11,28,12,13,21,7,19],kittiesandpuzzl:4,aggress:32,twa:10,proceed:21,distinct:[20,21,11,12,10,34,27],regist:[7,28],two:[10,0,1,12,2,31,28,4,22,32,21,34,6,36,27,14],coverag:[8,29],getweight:21,repetiti:15,machinediscoveri:30,taken:[13,21,10,1,4],showtot:12,minor:28,more:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,17,19,20,21,22,27,28,29,31,32,34,35,36],visitabledecor:21,desir:[10,11,5,21,28],mydialog:[],apologet:14,reconfigur:31,convinc:1,ddcardboard:21,flag:[10,28],stick:14,particular:[20,32,10,11,1,12,2,4,16,21,34,35,7,27,19],known:21,compani:[2,10],cach:10,dictat:2,none:[28,27,1,12],pyprog:1,jdk:[10,1,28],dev:7,histori:[7,9,14,6],testdemo2:1,remain:[16,21,12],caveat:[18,1],learn:[20,21,2,32,13,7],returnchang:12,statedemo:34,dee:34,def:[32,10,0,1,12,30,31,28,4,22,16,21,11,5,6,36,27,35,14,19,34],prompt:7,scan:13,challeng:35,share:[2,7,27],accept:[7,16,10,21,31],prose:13,minimum:[7,32,10,28],explor:16,explos:21,phrase:1,magenta:28,condemn:21,huge:19,cours:[20,10,1,29,2,4,21,34,36,19],goal:[20,9,10,1,12,2,21,32,14,35],awkward:10,divid:1,programmat:19,anoth:[20,10,11,28,12,31,4,32,21,34,7,27,14,19],comfort:[1,36],myratno:35,ish:[13,32],smalltalk:[20,28],simpl:[9,10,0,1,12,4,32,21,34,36,7,28],css:[8,29],distro:10,plant:21,resourc:[9,1,28,36,8,35],algebra:16,variant:21,reflect:[9,10,21,1],associ:[32,21],"short":[32,30],waysid:1,ani:[20,32,10,21,1,12,2,28,4,16,13,34,35,7,27,14,19],confus:[21,28,31,32,36,14],ambigu:10,caus:[20,10,1,12,31,4,21,7,28],flwr:31,drinkcompon:19,egg:[32,27],sysctl:30,help:[20,21,28,2,3,13,34,17,7],soon:1,held:[20,34,12],pythondialog:[],paper:[21,22],through:[20,32,10,11,1,12,2,28,4,22,16,13,34,27,21,14],cyan:28,hierarchi:[20,21,11,31,4,22,34],taxonomi:[20,9],makeschang:12,paramet:11,latt:19,style:[11,1,29,13,12,32,8],conjugategradi:11,alli:17,late:[21,19],rapidli:[10,28],astonish:20,pythondecor:14,match:[31,21,11,22,28],might:[20,10,11,1,28,2,4,22,16,21,14,35],currentst:12,wouldn:[21,1,4],good:[20,10,1,12,2,21,32,13],"return":[32,10,11,1,12,30,31,28,4,22,16,21,34,5,6,36,27,14,19,35],pollut:20,ttbinlist:21,framework:[20,9,10,0,1,12],somebodi:[2,7],placehold:12,complain:32,bigger:[10,12],whatiw:36,intricaci:4,customize2:0,hook:28,solver:11,instruct:[7,1],refresh:[8,6],easili:[20,10,11,1,12,27,22,21,5,36],achiev:[21,10,14,27,19],compris:14,getmodifi:1,found:[20,21,1,14,35,7,8,19],strategypattern:11,proxyadapt:36,harm:[9,21,12],weight:21,hard:[13,16,21,4,31],idea:[20,10,11,12,2,8,4,13,34,17,7,21,14],ndiff:6,realli:[20,21,11,12,10,32,36,27],finish:[20,10,1,12,7,14],connect:[20,21,11,28,12,10,27],windowadapt:28,ddpaper:21,detect_cpu:30,todo:[7,9,8,6,29],event:[20,10,0,35,28],flower:[9,28,31],safeti:[32,1],classvariablesingleton:27,multiplejython:10,actionperform:[],setsiz:[35,28],publish:[2,21,1],research:[2,10,36],footnot:[20,10,11,1,12,27,21,8],gameelementfactori:4,print:[0,1,2,4,5,6,8,9,10,11,12,13,14,35,21,22,27,28,31,32,34,19],qualifi:[32,1],lutz:32,proxi:[20,9,10,12,27,16,34,36,19],advanc:[2,11],reason:[20,10,11,1,12,2,4,32,21,34,36,14,19],base:[20,10,0,1,12,2,31,28,4,22,32,21,11,7,27,35,34],put:[20,9,10,21,1,12,2,8,4,32,13,5,6,7,27,14,17],teach:[2,9,1,17],bash:1,basi:[1,28],thrown:21,thread:[7,35,28],script:[13,9,10,11,32],struggl:20,revolutionari:1,perhap:[21,1,13,31,10,4,36],pythonsw:[],ascher:32,trashsort:21,lifetim:34,clump:5,assign:[7,14,10,5,32],major:[32,14],notifi:28,obviou:[16,21],blush:21,feel:[7,13,20,1],articl:[3,15],lastnam:7,number:[20,10,11,1,12,30,13,27,22,32,21,34,35,36,7,28,14,19],evolut:[20,21],sayhello:14,done:[10,11,1,29,2,4,32,13,7,28,8],construct:[16,10,14,1],colorboxestest:28,stabl:10,miss:[20,21,10,6],fanci:12,gpl:10,razor:20,differ:[20,32,10,11,1,12,31,4,22,16,21,34,6,7,28,14,19],php:28,exponenti:[20,19],interact:[31,10,4,36,22],tove:10,least:[20,10,1,21,32,7],addfactori:4,paint:[13,35],expand:[7,34],statement:[10,11,1,12,4,32,21,34,28,14],scheme:[31,21,28],syrup:19,store:[14,1,12],itempairgen:22,imperfect:13,option:[20,11,28,2,32,6,7,19],relationship:20,behind:[20,34],checklist:20,shapefactory1:4,shapefactory2:4,part:[20,9,10,0,1,28,2,8,21,25,32,23,24,11,6,7,14,19,35],pars:[32,9,21,22],consult:2,closenotifi:28,eventu:[20,1],tortoisehg:7,albeit:[20,32,10,21],kind:[20,32,10,1,12,2,31,4,22,16,21,34,28,14],plop:21,whenev:[20,21,0,28,4,5,7,14],remot:34,gotten:12,remov:[20,21,12,28,2,16],kapow:[],pythoninterpret:10,reus:[20,27,0,12,10,21,11],getconstructor:[10,21],toward:[20,1],danc:34,weapon:31,runsawai:12,comput:[10,21],nastyweapon:4,ardent:1,requisit:1,"null":[34,1,12,35],gettotalcost:19,sell:2,imagin:[21,4],wilson:14,built:[20,9,10,11,1,28,2,21,32,34,7],equival:[32,21,10,1,28],restfil:6,self:[20,32,10,0,1,12,35,31,28,4,22,16,21,11,5,6,36,27,14,19,34],violat:10,typediter:16,also:[20,32,10,11,1,12,2,28,4,16,13,35,17,37,7,27,21,14,19,29],bgboxobserv:28,build:[9,10,0,1,32,2,31,4,16,13,36,7,21,8],mouseev:28,brace:32,distribut:[7,13,10,4],exec:10,blackboard:35,eater:31,previou:[21,12,2,4,14,19],reach:[20,11,35],mixtur:19,addobserv:28,most:[20,10,0,1,28,2,4,21,11,5,14,19],plai:[31,21,4],cygwin:7,eaten:31,thidiscuss:11,maco:30,alpha:10,amaz:[10,14,35],fileread:35,clear:[2,20,14,28,12],cover:[2,13,33,0,1],roughli:[1,12],"_shared_st":27,ext:[8,29],clean:[32,21,10,1],jython2:10,xstart:35,usual:[20,10,0,1,21,32,5,14],mousetrap2:12,mousetrap1:12,ccolor:28,flowergen:31,canvaswidth:35,particularli:[13,32,21,22],uncov:10,font:2,fine:[21,4],find:[20,10,11,1,2,4,32,13,7,21,14,19],impact:[21,14],flesh:10,solut:[20,10,11,1,12,28,4,22,21,27,19],pyutil:10,templat:[9,10,0,12,2,4,32,16,13,11,21,14],darkgrai:[35,28],shapefact1:4,affirm:[32,1],unus:20,cappuccinodecaf:19,express:[13,20,1,32,22],entry_exit_class:14,swing:10,nativ:[7,10],mainten:[21,19],wateroff:10,ineffici:28,doubli:28,cyclic:12,stl:[16,10,11],common:[20,10,1,12,2,4,32,21,34,17,28],wrote:[10,1],commod:21,cafemochawetwhip:19,pyexcept:10,adopt:1,creator:[7,11,29],overwhelm:7,startup:[7,10],potent:10,emac:[7,9,8],bare:28,aluminumbin:21,arg:[27,1,28,10,32,21,7,14,35],close:[28,1,12,35],horizont:35,skill:11,analog:32,dwarf:31,expert:[13,11],someth:[20,10,11,1,12,2,31,22,32,13,17,36,28,21,14,19],particip:7,conditionb:12,conditiona:12,weakli:[],testb:1,won:[10,28,2,21,32,13],mutex:28,autogener:[8,29],experi:[2,20,10,14,1],nope:1,birkenfeld:7,altern:[20,10,1,3,21,14],signatur:[32,10],str:[32,28],numer:[0,5,11,22],hasnext:[16,21,10,1,12],complement:20,sole:11,isol:[20,21,11,4],statemachin:[9,12],disallow:4,cachedir:10,getmethod:[10,21],solv:[20,10,11,1,12,3,22,32,21,34,36,31,28,35],extraespresso:19,both:[20,10,28,13,4,22,32,21,34,35,7,27,14,19],"__instanc":27,last:[31,10,0,21],hyperlink:8,arraylist:[10,21],alon:[21,28],undetermin:0,context:[9,11,8],forgotten:15,commandpattern:11,whole:[21,11,1,12,2,10,28],load:[21,10,4,36,7,35],randomli:[31,1],simpli:[20,32,10,0,29,12,31,21,16,34,5,36,28],point:[20,27,11,1,12,30,2,4,32,13,7,28,21,14,35,18],schedul:[31,10],sweep:1,arbitrarili:[10,34],header:7,templatemethod:0,loveandtheft:14,param:10,linux:[7,8,30],throughout:[20,21,0,1,13,4],identif:21,java:[9,10,1,12,32,4,22,16,21,34,6,18,28,14,35],dum:34,due:1,empti:[35,28],implicit:14,mercuri:[7,9,8,29],newinst:[21,1],nois:1,pushnew:7,strategi:[9,11,6],addison:[21,11],versa:32,execfil:10,clariti:[13,19],imag:[13,28],great:[2,18,10,20],coordin:35,changeimp:34,understand:[20,10,12,13,27,32,21,14],demand:[2,32,34,1,4],makedir:6,fillablevisitor:21,look:[20,10,11,1,12,13,8,28,4,32,21,34,31,7,27,14,19,29],packag:[32,21,10,1,12],frozen:28,buildtabl:12,getquant:12,decrquant:12,ought:12,abov:[20,10,11,1,28,2,31,15,4,32,13,34,7,27,21,14,19],error:[21,1,12,13,10,6,28],fun:14,anonym:[9,21,37],fum:10,everyon:[29,28,2,32,13,17],loop:[20,21,0,10,4,32],pack:[],argin5:10,propag:[20,21,28],pound:32,argin1:10,argin3:10,argin2:10,readi:[2,7,21,0,35],petal:28,itself:[20,10,11,12,13,21,14,35],orgpattern:21,coroutin:[3,9],chase:4,decor:[9,27,28,14,21,16,8,19],guido:29,restructur:[2,7,6,13,9],minim:[20,1,28],boxwidth:28,belong:2,on_openbackground:28,shorter:[],read:[20,9,10,0,1,12,30,2,3,21,32,6,28,14,35],conflict:7,higher:7,cappucino:19,vertdir:35,optim:[10,21],painless:21,wherea:[32,21,11,12],ponder:20,setbackground:35,user:[9,10,28,12,2,4,16,21,7,27],stack:28,focal:20,recent:[10,1],lower:20,task:[7,13,28],lib:32,eleg:[20,27,21,32,34,14],entri:[13,8,10,14,35],localarrai:28,propog:28,parenthes:32,person:[7,10],testpythontojavaclass:10,chees:12,expens:[21,34],elev:[21,12],academ:1,imit:[7,32],propos:[7,20],explan:10,pyfloat:10,valueof:21,obscur:20,choru:34,world:[20,10,11,14,1],"67f":21,dumpclassinfo:10,dirlist:11,cut:[21,36,28],indexof:[10,21],mydecor:14,getreturntyp:1,snag:28,win:[31,10,22],input:[3,0,12],subsequ:[32,12],brainstorm:20,bin:[7,21,10,1],tomap:10,vendor:[31,21],format:[2,7,32,13],big:[32,10,14],intuit:10,game:[4,28],alias:34,insert:[32,21,27,6],verion:7,bit:[32,10,28,2,21,4,16,34,14],characterist:0,formal:[32,14],lost:[10,21],docutil:[],signal:10,resolv:21,fluf:13,collect:[20,21,11,1,12,27,36],"__new__":27,sizeabl:19,javabean:10,encount:[21,1,28,10,4,16],sketch:13,often:[20,10,11,1,12,2,31,15,21,32,13,5,17,36,28,14,19],acknowledg:[20,32],creation:[20,9,27,21,1,12,2,4,32,16,13,28,14],some:[0,1,2,3,4,5,7,8,10,11,12,13,14,17,35,20,22,21,29,28,30,32,36],back:[20,10,11,1,12,2,21,28,14,35],global:[10,1],understood:[10,1],wxpython:28,mirror:20,sprint:2,mindview:10,mousepress:28,syndrom:21,rien:20,scale:[3,10,1],chocol:19,mousemov:12,though:[21,27,14,1,28],per:[20,28,19,12,32],usernam:7,substitut:[32,14],mathemat:[11,22],larg:[2,3,21,33,12],market:31,fornam:[21,1],reproduc:2,norvig:28,machin:[7,9,12,30],addel:35,run:[20,9,10,0,1,12,21,32,11,6,7,28,14,35,34],martin:[21,14],agreement:10,stem:10,step:[20,32,10,1,2,4,16,21,7],initialst:12,subtract:20,impos:[16,12],sellimaginaryproduct:31,constraint:[20,32,21,12,2,16,14],materi:[2,13,17],memori:1,libero:12,dialog:[],cappuccinodrywhip:19,block:[13,6],plan:10,predat:31,repair:21,"__future__":[31,4,22],pythonpath:32,within:[20,21,28,12,10,4,32,14],oreilli:32,"caf\u00e9":19,contributor:[2,9,8,29],chang:[20,9,10,0,1,12,13,31,28,4,21,33,34,6,36,7,27,14,19],artifici:1,connector:20,inclus:[20,32],institut:1,spam:[32,27,28],valuminum:21,question:[7,20,10,21,12],submit:1,custom:[7,10,0,21,19],clip3:21,clip2:21,adjac:28,arithmet:35,pocoo:[8,29],clip4:21,forward:[20,10],jarrai:10,blueprint:[2,7],properli:[21,10,14,22],hawaiian:19,sc_nprocessors_onln:30,link:[7,13,11,8],translat:[20,9,10,21,1,12,2,4,22,16,13,28,8,35],delta:6,line:[9,10,0,1,12,8,15,21,32,11,5,6,7,28,14,35],talli:21,info:[21,5,28],concaten:32,consist:[20,21,1,28,13,4,32,19],caller:[21,4],strang:[32,4,12],jpython:10,priveleg:10,fillrect:[35,28],readlin:[10,21,12,35],similar:[20,10,11,1,12,21,32,34,28,14],toomuchaccess:1,parser:21,chao:1,doesn:[20,10,21,28,12,2,8,27,22,32,13,6,36,14],repres:[32,21,12],"char":[10,35],guarante:[7,12],cafe:19,fulful:11,titl:28,water:10,windowi:7,appendic:13,intvalu:10,tbinlist:21,"_imag":13,addmouselisten:28,getbound:35,cappuccinoextraespresso:19,nice:[2,7,32],draw:[0,4,35,22],getdeclaredclass:1,cappuccinoextraespressowhip:19,state_d:34,topydictionari:10,eval:[4,22],itemavail:12,pricevisitor:21,lang:[10,21],algorithm:[20,9,21,11,28,4,16,35],vice:32,downcast:21,actionlisten:[],entryset:10,normpath:6,tradeoff:19,jpanel:28,greenhousecontrol:10,mindlessli:21,karma:[2,13],far:[20,32,21,1],java2pi:10,hello:[14,12],prototyp:[20,9,21],code:[0,1,4,6,7,8,9,10,11,12,14,15,16,17,35,20,21,28,31,32,34,19,37],partial:32,hashmap:[10,21,12],scratch:[10,14],tclone:21,overlap:28,edu:[21,14],benevol:2,privat:[27,0,1,28,10,7],successfuli:10,elsewher:13,friendli:1,send:[2,32,10,34,21],granular:1,becam:1,paperscissorsrock2:22,sens:[20,10,11,1,4,32,21,5,14,19],junit:1,sent:10,func2:14,func1:14,cheapli:[10,21],mainstream:14,sausag:27,mous:[28,12],testdemo:1,electron:[2,13],chdir:1,volum:[2,13],whatius:36,implicitli:[20,32,10,4],kitti:4,tri:[10,11,21],troup:32,magic:27,succeed:11,counterproduct:21,knight:34,button:[7,4],hive:27,"try":[20,10,11,1,28,13,21,36,7,14,35],session:12,mousetraptest:12,pleas:[2,7,8,18],boxobserv:[1,28],fortun:21,readabl:32,natur:[21,1,28,13,32,14,35],verbiag:32,elisp:7,jump:14,slithi:10,binset:21,singletondecor:27,download:[2,7,10,16,28],odd:[34,19],click:[7,13,28],append:[10,11,1,28,32,6,7],compat:29,index:[9,10,11,13,21,5,7,8],getclass:[16,31,10,21,12],compar:[7,21,11,1],espresso:19,access:[27,1,28,4,32,34,14],deleteobserv:28,runuculu:31,mouseadapt:28,spoken:21,whatev:[13,21,1],ibid:20,absolut:32,len:[11,35,1,28,6],closur:14,let:[10,1,12,13,4,21,14,19],becom:[20,32,10,1,12,21,16,28,19],sinc:[20,10,11,1,12,4,32,21,34,28,14,19],convert:[10,0,12,28,16,8],talent:2,convers:10,musser:16,larger:[21,29],makec:36,makeb:36,makea:36,fetch:[21,28],staticmethod:[27,14,4,36,6],earli:[13,18,10,1],typic:[20,21,11,1,12,32,0,5,14,19],ratcanmov:35,evalrock:22,chanc:11,transitiona:12,appli:[20,21,12,1,28,32,36,14],app:28,foundat:[9,23],"_updat":6,pyton:10,fillablecollect:21,hennei:20,"boolean":[10,21,12,35],notenough:12,limb:14,newimp:34,puriti:10,fee:10,from:[0,1,2,4,5,6,7,8,9,10,11,12,13,14,16,17,18,19,20,21,22,27,28,30,31,32,34,35,36,37],sysconf:30,zip:[7,6],commun:[2,10,35],doubl:[9,21,31,10,4,32,22,27],addtrash:21,whatihave3:36,whatihave2:36,implic:19,few:[5,19],camera:2,usr:[7,1],stage:[20,21,19],remaind:[7,9,21,8],sort:[20,32,10,11,21,16],clever:20,src:7,tplus1:14,impress:[10,21],train:2,bufferedread:35,iii:[9,25],starter:35,account:[7,1,19],alik:2,retriev:10,when:[20,10,11,1,12,2,31,4,22,32,18,34,35,36,7,28,21,14,19],annot:[14,12],thin:4,meet:[31,21,12],scatter:21,aquamac:7,proof:21,control:[20,9,10,11,28,12,13,4,32,21,34,7,27],cafemochawet:19,process:[20,32,10,0,1,12,13,4,22,16,21,11,7,14,19],lock:[2,14],trap:12,high:[20,21],tag:[13,4,12],trashvisitor:21,csum:21,onlin:[13,28],kevlin:20,delai:[10,12],friendlier:7,comedi:32,georg:7,shapenamegen:4,sig:10,feta:19,subdirectori:[21,10,1,6],instead:[20,10,11,1,12,4,22,21,7,28,14,19],sin:10,stock:7,overridden:[32,21,0,1,12],pyarrai:10,hazard:11,callback:[21,11,28],rmtree:6,multipl:[9,10,11,28,13,31,27,22,32,21,7],"120dpi":7,cheaper:20,physic:35,alloc:1,drop:21,essenti:[20,32,21,11,1],seriou:1,correspond:[21,5,1,19],element:[20,21,1,12,10,32,14],issu:[13,20,27,21],allow:[20,10,11,29,12,31,4,21,0,28,14,34],subtyp:21,horizdir:35,espressodecor:19,move:[20,10,11,1,12,2,21,13,35,7,28,8,29],evolutionari:21,comma:32,bunch:21,perfect:[2,13,21,20],outer:[27,10,36,1,28],chosen:[2,28],settitl:28,gnomesandfairi:4,newsgroup:7,decaf:19,criterion:28,tst:1,typemap:21,rat:[9,35],factor:[20,32,10,1],greater:10,"__getitem__":10,handl:[20,32,21,0,8],auto:7,spell:2,dai:[2,10],ctor:21,devel:7,dat:21,mention:[2,21,11,1,4],snake:32,front:[9,34,19],strive:21,multiprocess:3,somewher:[7,4,28],anyth:[20,10,1,28,2,21,13,14],edit:[7,9,21,16,32],tran:12,quest:20,mode:[2,7,10,6],isclass:6,batch:32,reserv:1,newtonsmethod:11,psum:21,flair:13,subset:[21,19],chung:27,tolist:10,openobserv:28,transitionb:12,transitionc:12,nodecor:19,"static":[20,10,1,12,4,32,21,6,36,27,19],"_delta":6,whet:20,our:[10,14,21],patch:[7,28],transitiont:12,special:[21,10,4,32,34,7],out:[20,9,10,21,1,12,30,2,28,4,22,32,13,7,27,14,18],variabl:[7,32,27,12],matt:14,contigu:28,cwr:35,dongwoo:7,stub:34,texliv:7,suitabl:10,rel:21,leverag:10,ref:7,"23f":21,math:[10,21,28],clarifi:2,insid:[10,1,12,4,32,21,36,7,28,14],sortintobin:21,manipul:[16,10],standalon:7,dictionari:[10,12,4,22,32,5,36,8],tempt:34,releas:[28,1,12],embarrass:1,correcton:2,could:[20,10,11,1,12,2,28,4,32,21,34,5,27],ask:[20,10,28,4,16,21,35,7,19],membership:21,keep:[20,10,21,1,12,2,4,13,34,5,7,28],length:[21,12,1,28,13,10,35],enforc:1,outsid:[32,21,10,4],south:35,softwar:[7,1],qualiti:[20,1],scene:34,echo:[],date:10,set:[9,10,0,1,12,2,28,4,22,32,21,11,6,36,7,27,14,19],flyweight:12,newsingleton:27,facil:2,redund:11,cafemochaextraespressowhip:19,prioriti:7,"long":[10,21,2,4,32,13,34,7,27,14,19],start:[20,9,10,0,1,28,30,2,27,22,13,7,21,14,35],unknown:[21,22],licens:[2,9,10,27,17],perfectli:12,mkdir:10,system:[20,10,11,1,12,30,2,31,15,4,22,13,7,21,35,18],messag:[20,10,12,1,28,32,7],attach:[13,9],termin:[32,11,1,35],"final":[20,10,0,1,28,2,31,21,13,35,7,14,19],shell:[7,32,10],rsa:7,exit_on_clos:28,slider:4,rst:[2,7,8,6],exactli:[32,10,21,19],readlinelib:10,haven:[13,21],python3pattern:[7,8],cpython:10,embodi:20,split:[6,28],see:[0,1,2,4,6,7,8,10,11,12,14,16,18,19,20,21,27,28,32,34,36,37],structur:[20,9,10,11,1,12,21,16,32,34,35,19],charact:[10,4],bind:[2,21,22],steer:35,imho:32,aggreg:21,isstat:1,clearli:[20,21,19,1,12],have:[0,1,2,4,6,7,14,10,11,12,13,15,16,17,18,19,20,21,22,27,29,28,31,32,34,36],tabl:[9,12,31,22,16,32,34,37],need:[0,1,2,4,5,7,8,10,11,13,14,17,19,20,21,22,27,28,29,31,32,34,36],imatix:12,turn:[20,10,1,12,2,21,32,34,35,28,8,19],gentli:14,lightgrai:[35,28],messeng:[9,21,11,12,5,6],rout:20,rmic:34,mix:21,sei:1,which:[0,1,2,3,4,5,6,7,14,10,11,12,13,15,16,19,20,21,22,27,28,31,32,34,35],linda:16,singl:[10,11,28,12,13,4,22,32,21,34,7,27,14],uppercas:0,entry_exit:14,"5b0":10,htmlhelp:7,who:[21,28,29,2,13,17,7,8],minimasolv:11,discov:[20,9,21,1,30,13,4,7],rigor:1,textui:[],mactex:7,"class":[0,1,4,5,6,14,9,10,11,12,16,35,20,27,22,21,28,31,32,34,19,36,37],changealgorithm:11,wikic:21,gather:20,request:[20,11,35,12],face:21,pipe:10,bui:2,michel:14,determin:[32,21,11,12,4,22,16,35],fowler:[21,14],occasion:1,constrain:1,fact:[20,27,1,28,10,32,21,14],statemachine2:12,dbm:12,text:[9,12,2,15,32,13,6,7,35],whatiuse2:36,bring:[20,10,2,21,32,14,35],developerguid:8,debat:13,trivial:[21,10,1,12],anywai:[13,32,11],pythoncardprototyp:28,redirect:[27,10,1],textual:28,locat:[10,11,1,12,21,7,8],launchpad:[2,13],createbox:28,hadn:12,winner:31,jar:10,mug:19,should:[20,32,10,11,1,12,13,3,4,16,21,35,7,28,14,19],smallest:[21,19],suppos:[21,1,28,10,4,32,14],esqu:32,disciplin:14,inhabit:31,local:[20,21,28,2,7,19],hope:[20,8,17],insight:[20,21],contribut:[2,7,29,13,9],espinc:21,ludicr:21,familiar:[7,16,21],disagre:6,autom:[21,1,12,13,15,10],regularli:[21,19],piecewis:11,bean:10,increas:1,applicationframework:0,triangl:4,extract:[21,10,1,6],enabl:[10,14],organ:[2,7,21,20,1],bisect:11,coplien:[21,11],grai:28,stuff:13,integr:[32,21,11,1,28],contain:[20,9,10,28,12,4,32,16,21,6,36,7,27],grab:21,ddglass:21,view:[13,28],conform:19,"0079e10c":27,frame:35,knowledg:[32,1,4],popen2:30,dynatrash:21,temporarili:10,distract:10,py2int:10,syntact:31,polymorph:[9,21,31,4,22,32],statu:21,wire:[27,21],dlg:[],correctli:[7,1],pattern:[20,9,10,11,1,12,31,28,4,16,21,25,6,36,7,27,14,19,34],boundari:[7,10],misus:[20,21],tend:[20,32,21,1],favor:20,state:[20,9,27,11,28,12,4,32,21,34],japplet:0,progress:[7,8,14],email:[7,20],pazzaglia:16,bed:28,kei:[21,12,31,10,22,32,36,7,19],p2j:10,itertool:[26,9],job:[2,32,21,0],entir:[20,10,28,21,32,14],measur:13,cafelattedecafwhip:19,addit:[10,1,12,2,21,32,34,7,28,14],exclaim:32,boxheight:28,admin:13,invulner:21,equal:[20,21,10,1,32],etc:[21,11,2,4,22,18,0,7,14,19],admit:[20,21],instanc:[27,1,12,10,22,19],equat:14,section:[20,10,31,21,4,33,36,7,8],freeli:[16,10,1],comment:[7,32,10,1],make_fil:6,interp2:10,"0076c54c":27,simpleclass:32,wall:35,guidelin:[13,21],kungfugui:4,arriv:21,chmod:10,walk:[20,1,6],distinguish:[21,1],incess:29,respect:21,labor:20,quit:[10,1,12,13,4,32,14,19],htmldiff:6,decent:20,obstacl:4,compon:[16,28,10,21,19],treat:[21,10,1,12],nextto:28,immedi:[21,14,1,35,4],interactwith:4,assert:[36,1,12,4],espressoconpanna:19,togeth:[10,11,21,32,34,36],present:[20,21,1,12,10,36,19],multi:12,main:[10,0,1,28,2,21,32,7,35],plain:[7,19],align:32,harder:10,defin:[20,32,10,0,1,12,28,4,16,21,5,27,14,19],aarrgggh:35,decept:10,observ:[20,9,27,1,12,21,28],cafemocha:19,htmlbutton:[],layer:[20,19],almost:[20,10,28,31,32,14],site:[2,21,11],motiv:[2,9,10,20,1],fiddl:34,incom:2,revis:21,cafemochadecaf:19,whatihav:36,bolder:1,mousemovelist:12,began:[20,1],classpath:[32,10,1],cross:[2,13,10],member:[21,1,28,2,31,22],python:[1,2,4,6,7,14,9,10,11,12,13,15,18,19,20,21,22,27,29,28,30,32,33,34],tendenc:21,fill:[10,21],infer:32,difficult:[20,10,12,2,21,32,19],competit:28,http:[10,11,1,12,8,21,29,7,28,14,35],original_new:27,denot:32,expans:[10,12],drink:19,upon:[31,10,14,21],effect:[27,11,1,12,4,22,21,36,28,19],coffe:[9,19],handi:28,issuccess:11,tribut:22,pdf:[2,7,13,9],canva:35,decoupl:[16,9,11,28],misappl:21,pull:[7,21,10,8,6],off:[20,10,28,2,15,21,32],center:[],albin:21,firstli:19,builder:10,nonetheless:14,well:[20,10,1,28,2,21,13,5,35,14,19],difflib:6,numerical_integr:11,thought:[20,27,11,29,21,16],scissor:22,weblog:14,exampl:[0,1,2,4,6,7,8,9,10,11,12,13,14,19,20,21,22,27,29,28,31,32,34,35,36,37],command:[9,10,0,1,15,32,11,6,7],setq:7,choos:[9,21,11,1,2,4,7,19],breaker:20,latest:7,test1:[10,1],test3:[10,1],test2:[10,1],test4:10,less:[20,21,1,13,5,14,19],hybrid:10,trust:1,heavili:[16,21],cafelatt:19,simultan:[7,21],gliffi:13,web:[2,32],rapid:10,newbrain:11,field:[10,12,1,28,13,32],bell:[10,21],makefil:[10,8,1,29],knew:1,proxydemo2:34,add:[1,2,4,6,7,8,10,11,12,13,14,15,17,19,20,21,22,27,28,31,32,34,35],jython_hom:10,wet:19,collis:35,smart:[10,34,12],confront:27,jython:[9,10],royalti:[2,10],rememb:[32,21,10,22],fate:21,sumvalu:21,piec:[20,21,27,6],arguabl:[10,21],testa:1,camelcas:13,realiz:[16,20,21,1,32],know:[10,21,1,28,2,8,22,13,7,14],press:32,redesign:21,height:[35,28],recurs:[21,11,4],loss:19,trash:[20,9,21],resid:32,like:[20,32,10,11,1,12,2,31,28,4,22,16,13,34,17,7,29,21,14,19,35],success:[20,10,11,1,21,16],incred:32,paperbin:21,necessari:[21,0,1,12,10,32,34,36,7],lose:[21,10,22,31],resiz:[32,0],boxdesc:28,page:[7,9,11,14,32],poor:21,sum:[32,21],trashbin:21,captur:[10,14],suppli:10,phenomena:28,cafemochaextraespresso:19,growth:19,"export":[7,10],superclass:10,flush:1,proper:[10,21,12],home:[7,10],peter:28,librari:[32,10,11,1,28,30,16,5,36],simple2:32,tmp:1,"__setattr__":27,est:20,lead:20,bintyp:21,avoid:[7,20,21],setlayout:28,slide:17,"__getattr__":[27,34],leav:[21,28],itemnotavail:12,speak:[2,34],getnam:[21,1],myfunct:32,hinder:32,weslei:[21,11],slower:[20,10],investig:35,usag:[20,9,21,1],facilit:[21,28],host:[2,7],although:[20,10,21,1,2,4,13,5,7,14],offset:28,beneath:0,simpler:[20,21,1,28,27,34,14],about:[20,9,10,21,1,12,30,2,8,4,22,16,13,35,36,7,14,19,32],quarter:12,actual:[20,32,10,11,1,12,4,22,16,21,34,6,28,14],column:28,purist:21,javaclass:10,mindviewinc:[],bridg:10,constructor:[10,0,1,12,28,4,32,21,27,14],wxcommandev:28,"0076b7ac":27,own:[20,10,28,1,12,2,15,4,22,32,21,33,34,6,7,27,8,19,35],fillov:35,bashrc:10,automat:[9,10,11,1,12,13,15,4,32,21,34,5,6,36,7,28,29],guard:20,getpric:12,awhil:20,rectifi:[21,14],pitfal:32,forget:21,mere:10,merg:[7,9,8],prozac:12,val:[32,21,10,27,28],transfer:[9,5,12],inner:[9,10,1,28,27,21,36,37,14],arg1:[32,14],maze:[9,35],typenum:21,arg2:[32,14],"function":[9,10,11,1,12,32,3,28,4,22,16,21,5,31,7,27,14],mailer:7,north:35,pythontojavaclass:10,subscrib:20,bodi:[32,21,11,14],gain:2,eas:[21,19,12],highest:7,bug:[7,31,21,1],count:[32,1,12],made:[10,12,28,29,13,21],cleanup:1,newval:21,whether:[10,11,12,28,2,21,35],wish:[10,1,19],scroll:10,displai:[32,10,14,1,6],troubl:[7,32,10],record:35,below:[7,10,11,28,19],limit:[32,10,14,27],testfil:6,trepid:14,otherwis:[20,21,11,1,28,2],problem:[20,32,10,11,1,12,3,28,4,22,16,21,34,36,31,27,14,19],jdialog:[],evalu:12,"int":[21,12,1,28,30,10,8,35],dure:[10,1,12,2,21,16,34,14],twist:21,implement:[20,9,10,11,1,12,31,4,32,21,34,35,36,28,14,19],decorator_function_with_argu:14,eric:[34,28],probabl:[20,10,11,28,13,22,32,21,34,5,14],typemapadapt:21,inevit:21,entry_exit_funct:14,detail:[20,9,27,11,28,30,31,21,7],virtual:[21,0,12,31,4,32,34,7],preinstal:7,other:[0,1,2,4,7,8,9,10,11,12,13,14,15,16,19,20,21,22,27,28,31,32,34,35,36],lookup:[31,22],futur:[2,10],branch:[7,9,21,8,35],bazzar:13,repeat:[20,11,28,4,7,19],star:27,fulli:32,multipledispatch:22,cafelatteextraespressowhip:19,singleton:[20,9,27,36,12],lightoff:10,mazework:35,stai:[20,21,11],experienc:32,sphinx:[9,29,2,13,7,8],interp1:10,came:[16,20,21],indirectli:21,rule:[20,9,10,1,13,32],fillabl:21,portion:1,klass:[27,28]},titles:["Building Application Frameworks","Unit Testing &amp; Test-Driven Development","Introduction","Coroutines &amp; Concurrency","Factory: Encapsulating Object Creation","Messenger/Data Transfer Object","Comprehensions","Developer Guide","ToDo List","Python 3 Patterns, Recipes and Idioms","Jython","Function Objects","StateMachine","Book Development Rules","Decorators","A Canonical Form for Command-Line Programs","Iterators: Decoupling Algorithms from Containers","Teaching Support","A Note To Readers","Decorator: Dynamic Type Selection","The Pattern Concept","Pattern Refactoring","Multiple Dispatching","Part I: Foundations","Part II: Idioms","Part III: Patterns","Generators, Iterators, and Itertools","The Singleton","Observer","Contributors","Discovering the Details About Your Platform","Visitor","Quick Python for Programmers","Python 3 Language Changes","Fronting for an Implementation","Projects","Changing the Interface","Table-Driven Code: Configuration Flexibility"],modules:{},descrefs:{},filenames:["AppFrameworks","UnitTesting","Introduction","CoroutinesAndConcurrency","Factory","Messenger","Comprehensions","DeveloperGuide","ToDo","index","Jython","FunctionObjects","StateMachine","Rules","PythonDecorators","CanonicalScript","Iterators","TeachingSupport","NoteToReaders","Decorator","PatternConcept","PatternRefactoring","MultipleDispatching","Part1","Part2","Part3","GeneratorsIterators","Singleton","Observer","Contributors","MachineDiscovery","Visitor","QuickPython","LanguageChanges","Fronting","Projects","ChangeInterface","TableDriven"]})
+Search.setIndex({desctypes:{},terms:{defaultcloseoper:10,orthogon:20,yellow:28,four:[13,35,12],secondli:19,prefix:28,sleep:[35,28],dirnam:[1,6],"00798f9c":27,browse_thread:7,gladiolu:31,evalscissor:22,whose:[16,21,11,22,28],selen:7,concret:[21,1,4],swap:[34,28],under:[20,10,11,1,12,2,16,34,7],testabl:1,worth:[21,10,4],lure:12,everi:[20,32,10,1,12,2,4,16,21,28,14,19],risk:29,inventfeatur:31,matchobj:6,rise:20,lurk:10,voic:[2,13,1],penchant:32,decorator_without_argu:14,govern:12,affect:[21,28],rare:20,disturb:[21,4],nestedshapefactori:4,metaclass:[27,14],decorator_with_argu:14,correct:[10,21,12],"__templatemethod":0,getdeclaredmethod:1,technolog:[13,1],verif:1,unpredictableperson:12,cappuccinowhip:19,c02:1,categori:[20,14,28],cmp:12,storag:27,"10f":21,direct:[20,9,10,12,4,14,35],sourceforg:[10,28],nail:21,second:[32,10,11,28,27,22,16,21,34,14],classcastexcept:16,"__finditem__":10,even:[10,11,1,13,27,32,18,34,7,21,14,19],hide:[20,21,36],createshap:4,canvasheight:35,item1:22,weren:27,shallowai:11,firstdigit:12,"new":[20,32,10,0,1,12,2,3,15,4,22,16,13,11,6,31,7,21,8,19,35],net:[10,1,28,2,13,7],ever:[16,21,22],succumb:1,liberti:36,told:4,getsiz:28,widget:28,behavior:[20,10,11,28,12,27,22,16,21,36,14,35],never:[2,27,10,21,1],here:[1,2,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,27,28,30,32,35,36],"__hash__":12,debugg:7,gridlayout:28,path:[21,1,12,10,6,7,28],cardboard:21,interpret:[20,9,10,11,21],dry:19,sweeet:7,howev:[20,32,10,11,1,12,13,31,28,4,16,21,34,5,35,36,7,27,14,19],haschang:[28,12],credit:[13,9],errmsg:1,studi:[20,21,1,28,4],readlinesetup:10,portabl:[10,4],tremend:10,golden:20,argin4:10,"_test":6,brought:[7,32,10],substr:21,unix:30,ratsandmaz:35,wateron:10,total:[10,21,12],unit:[9,10,1],getchar:10,plot:28,redon:13,describ:[20,32,10,1,12,2,31,21,16,34,5,7,19],would:[32,10,0,1,12,2,28,4,16,21,11,17,27,14,19],quickpython:32,suit:1,call:[20,32,10,0,1,12,31,28,4,22,16,21,11,6,36,7,27,14,34],typo:13,recommend:21,type:[20,9,10,11,1,12,32,31,28,4,22,16,21,36,7,27,19],until:[20,10,11,12,31,21,32,6,18,14],looni:11,relat:[20,34],notic:[10,1,28,31,22,4,32,21,14],hurt:28,warn:[20,10,8,21],glass:21,flowervisitor:31,moin:14,hole:1,hold:[10,11,12,13,21,16],unpack:[10,21],must:[10,11,1,12,2,31,28,4,22,32,21,5,35,36,7,27,14,19],join:[10,6],err:[21,1],setup:[7,1,4],work:[20,9,10,21,1,28,32,2,8,4,22,16,13,34,6,7,27,14,19,18],worm:31,contentpan:10,root:[21,1],overrid:[21,0,1,28,12,32,7],walk_comprehens:10,give:[20,10,1,30,2,21,32,13,7,14,35],digit:12,indic:[9,10,29,12,21,4,32,28,14],doublevalu:21,setvis:[10,35,28],unavail:12,unassign:7,david:[20,32],addtobin:21,end:[20,10,11,28,2,22,32,13,21,8,35],quot:32,ordinari:[21,10,1,28,4],classifi:[20,9],revisit:[21,4],how:[20,32,10,11,1,28,2,31,15,4,22,16,13,7,27,21,19],hot:19,disappear:[18,35],env:1,answer:[7,21,1,22],verifi:[10,1],changeinterfac:36,perspect:[20,21],"void":[10,1],updat:[29,28,6,7,8,35],my_new:27,recogn:[],lai:1,mess:2,coffeeshop:19,after:[20,10,11,1,12,8,27,32,21,35,7,14,19],implementation1:34,lump:34,implementation2:34,diagram:[9,21,12,13,34,7,8,19],befor:[20,32,10,11,1,12,2,21,16,28,14,19],wrong:[21,10,1],beauti:[21,34],law:20,parallel:[20,3],demonstr:[10,0,1,28,12,31,22,32,34],beanmeup:19,chere:7,profess:17,attempt:[20,21,1],third:21,classmethod:27,revolv:20,exclud:1,wink:0,maintain:[20,21,11,12,13,22,35,14,19],environ:[7,31,21,4,30],incorpor:[10,11,14,1],enter:[10,14,28,12,35],lambda:10,someplac:7,order:[32,10,0,28,12,2,4,16,21,11,5,7,8,19,34],oper:[20,9,10,11,32,12,31,15,4,22,16,21,7,14],composit:20,os_walk_comprehens:6,over:[20,32,10,11,1,2,21,16,14],fall:[14,1,30],orang:28,becaus:[20,32,10,21,1,12,2,31,27,16,13,34,36,7,28,14,18],paperscissorsrock:[31,22],flexibl:[20,9,10,11,12,22,32,21,37,19],vari:[20,11],fit:[20,21,11,1,28,2,34],fix:[27,28,29,13,31,21,7,8,19],avocado:19,"__class__":[31,10,11,22,19],bytecod:10,better:[20,10,11,1,12,2,21,13,28,14],imp:[16,34],blemang:32,comprehens:[9,10,6],hidden:[32,21,0,34],schmidt:21,easier:[20,10,1,12,31,5,7,28,14],glassbin:21,them:[20,32,10,11,1,28,2,31,22,16,13,35,6,7,21,14,19,17],thei:[20,32,10,11,1,12,2,31,27,16,13,6,36,28,21,14,19],proce:7,safe:[16,9,10,14],stringformat:32,"break":[21,1,29,19,35,6],promis:21,setvalu:21,"instanceof":21,choic:[21,11,28,2,31,4,22,13,35,7,19],grammat:2,alex:27,brough:[],getvalu:[10,21,12],closeobserv:28,each:[20,9,10,0,1,12,31,28,4,22,32,21,11,35,6,27,8,19,34],debug:[10,8,29],side:[7,13,10,21,1],mean:[20,32,10,11,1,12,13,31,21,16,34,28,14,19],prohibit:21,setdefaultcloseoper:[10,28],nochang:12,enorm:14,arduou:19,taught:11,makecharact:4,receptacl:21,collector:10,whip:19,goe:[13,32,21,19],langug:10,gof:[20,11,34],content:21,rewrit:[10,2,8,21,16,13,34,36,7,14,19],dsl:10,vector:[20,21,35,12],adapt:[7,9,21,36],reader:[9,1,13,16,32,5,18],got:[13,1,36],washer:12,forth:10,linear:20,barrier:20,written:[32,11,1,28],situat:[32,27,10,21,1],free:[7,13,20,12],standard:[20,10,11,1,28,32,14],ncpu:30,println:[21,10,1],mousemovegener:12,quickinstal:7,sheet:[7,1],kit:10,acrobat:7,uiuc:21,puzzl:4,angl:20,openssh:7,mvc:28,isn:[20,10,0,28,2,21,32,34],subtl:[20,21],onto:20,bite:1,rang:[10,0,28,31,4,22,32],isassignablefrom:1,gradi:21,hoop:14,independ:[20,21,28],wast:[32,4,28],restrict:[2,10,14,27,28],"__tojava__":10,unlik:[32,21,11,1],alreadi:[20,10,11,1,28,2,21,16,7,35],wrapper:[10,21],wasn:21,getmemb:6,thick:4,agre:32,primari:[3,21,11,1,31],hood:10,brillig:10,vendingmachinetest:12,rewritten:[13,18],"__implement":34,spinach:19,top:19,evolut:[20,21],cardboardbin:21,rsrc:28,gnureadlin:10,master:[10,21,12],too:[20,10,1,13,21,33,18,14,19],similarli:10,consol:[10,1],tool:[9,10,11,1,12,2,4,13,7,28,21,8],propon:21,getcontentpan:28,somewhat:2,technic:13,trek:27,silli:21,target:[10,28],keyword:[32,10,4,28],provid:[20,32,10,0,1,12,28,4,16,21,11,36,7,27,14,19,34],"__onlyon":27,tree:[10,1],hors:32,prong:21,project:[20,9,10,1,2,31,21,13,17,7,8,35],matter:[13,20,21,11,4],pressur:1,foamedmilk:19,fashion:[32,21,14],mind:[13,27,1,6],mine:7,raw:32,aforement:20,cohes:[20,21],"__main__":[27,1,28,10,32,6],seen:[20,32,10,11,28,12,2,4,16,34,14],seem:[20,10,1,12,14,4,32,21,34,8],seek:[21,12],seminar:2,innerclass:10,realm:[16,20],respectjavaaccess:10,terrif:10,latter:[20,10],cope:21,thorough:10,alreadyopen:28,staticinnerclass:10,client:[21,0,1,12,2,34,36],alldecor:19,thoroughli:2,wherebi:12,simplifi:[7,27,10,4],shall:[10,11,1],bruce:7,glob:[10,1],object:[20,9,10,11,1,12,32,8,28,4,22,16,21,34,5,35,36,31,27,14,19],deleg:[27,34,21],regular:[32,10,1,19],letter:0,phase:[20,21,14],coin:11,brien:21,tradit:20,simplic:[20,31,10,12,32],don:[20,9,10,21,28,2,3,4,22,32,13,33,34,36,7,14,18],simplif:10,pythoninterpreterset:10,doc:7,flow:[13,10],doe:[20,10,11,1,12,8,28,4,32,21,0,27,14,29,34],bash_profil:7,dummi:11,declar:[32,1],wildcard:10,itemslot:12,notion:34,dot:10,marvel:32,has_kei:[21,4,12,30],endear:10,visitor:[20,9,21,1,28,31],"__str__":[31,27,11,22,12],random:[20,21,28,31,4,22],syntax:[10,1,27,32,21,5,14],"2008v1":7,involv:[20,27,15,21,16,7],despit:21,layout:[2,13,10],acquir:28,menu:[7,15,4,19],explain:[34,14,1,4],configur:[9,10,28,12,13,22,21,7,37],restaur:19,sugar:14,theme:11,busi:31,"__call__":[27,11,14],priveledg:[],oct:10,edict:31,cappuccino:19,vener:7,stop:[21,1],next:[10,11,1,12,4,16,21,27,35],on_mouseup:28,report:[7,1,35],rosettacod:11,bat:10,bar:[13,3,27],isopen:28,emb:[32,10],baz:3,shape:[21,4],method:[20,9,10,0,1,12,31,28,4,22,32,21,11,6,36,27,14,19,34],twice:[1,28],bad:[13,4],steam:19,fair:11,decoratortalk:14,elimin:[10,21],mandatori:20,result:[20,32,10,11,1,28,21,16,6,14,19,35],respons:[9,21,0,12,32,11,35,19],fail:[21,10,14,1,12],themselv:[20,32,28],bee:[31,34,28],hammer:21,best:[20,10,2,32,13,7,14],brazil:2,awar:[21,10,4,28],said:2,alsum:21,databas:27,hgrc:7,red3d:35,discoveri:[20,21],figur:[2,13,10,21,30],emptor:18,simplest:[20,27,10,1,28],awai:[20,21,19,12],getkei:10,approach:[20,9,10,28,12,31,4,16,21,36,7,27,14,19],attribut:[2,14,10,5,20],accord:[16,21,1],extend:[16,31,21,1,4],xrang:10,weak:32,extens:[7,13,10,21],lazi:[27,34,12],preprocessor:14,backgroundcolor:28,rtti:[9,21],aparat:21,protect:[10,34,1,28],accident:[20,21],expos:[21,36],ill:21,pitt:14,against:[31,10,14,21],logic:[20,28,19],countri:11,com:[20,10,1,12,13,21,16,7,14,35],con:19,compromis:[9,19],kwd:27,notifyobserv:28,elf:31,excess:12,coconut:32,"2nd":10,diff:7,guid:[7,9],assum:[7,32,27,21],panel:28,duplic:[20,6],light:10,testsynchron:28,three:[20,10,12,31,14,19],been:[20,10,21,28,12,2,27,32,13,34,18,14],chrysanthemum:31,much:[20,10,21,1,28,2,3,4,32,13,31,7,14,18],interest:[20,10,1,28,2,27,21,14],basic:[20,9,10,1,12,2,4,32,16,21,34,36,28,14,19],"__doc__":6,"__len__":10,quickli:[10,12],life:28,rather:[32,10,1,28,30,13,31,4,16,21,34,36,14,19],deeper:[21,10,4],getval:10,xxx:30,isfunct:6,dave:16,alreadyclos:28,bookstor:2,ugli:[21,36],exception:[32,10],ident:[27,36,21,12],occam:20,gnu:1,servic:[2,13],properti:10,commerci:[13,10],air:[4,12],employ:2,calcul:[11,28],aid:32,vagu:20,dizzi:20,enlev:20,seconddigit:12,player:28,kwarg:[5,6],indent:[13,32,6],tediou:[10,28],sever:[21,10,4,12],valgen:10,quand:20,perform:[20,10,11,1,12,31,4,22,21,0,28,14,19],suggest:[20,27,1,13,21,32,7],make:[1,2,4,5,6,7,8,9,10,11,12,13,14,17,19,20,21,22,27,29,28,31,32,34],transpar:[10,1,19],complex:[9,10,11,1,28,4,6,14],descend:1,tackl:21,complet:[20,10,1,12,21,34,7,28,14,35],inheritor:28,blue:28,listperform:37,hand:[20,32,27,11,28,13,4,16,21,14],fairli:[20,21,1,28,10,22],nix:10,rais:[2,21,12],garlic:19,refin:[10,8,21],techniqu:[27,3,21,4,16,31],qualif:10,jframe:[10,28],kept:[2,1],thu:[20,32,10,11,1,12,4,22,16,21,0,14,19],getbyt:35,inherit:[20,9,10,11,1,12,28,4,32,21,0,27,19],runtimeexcept:[16,12],academia:11,shortli:[32,1],greatest:[20,21],thi:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,18,19,20,21,22,27,28,29,31,32,33,34,35,36],programm:[20,9,10,0,1,12,2,27,32,34,36,14],everyth:[10,28,30,2,21,32,13,18,14],isomorph:20,left:[20,21,28,13,31,15,6,7],agon:2,identifi:[7,32,10,4],setcolor:[35,28],just:[20,10,11,1,12,30,2,28,4,22,32,13,34,5,6,7,27,21,14,19,18],"__dict__":[27,5,6,28],kdiff3:7,yet:[32,10,1,28,13,27,16,21,6,18,35],languag:[20,9,10,11,1,12,3,4,32,21,33,6,14,29],previous:[21,4],easi:[20,10,1,22,32,21,7,19],had:[20,32,10,11,1,12,2,31,21,16,35,14,19],keyset:[10,21],spread:[4,22],prison:35,falter:1,els:[20,10,1,12,30,27,32,21,6,7,35],functionobject:11,explanatori:10,gave:[2,21],applic:[20,9,10,0,12,4,34,7,14],larman:36,mayb:[13,8,1],ajout:20,background:28,elabor:21,shadow:20,unten:14,readlineconsol:10,apart:20,maxval:10,specif:[20,10,11,1,12,4,16,21,34,7,28,8],arbitrari:[32,21],nudg:0,hunt:[21,35,28],manual:[21,22],doubledispatch:21,tymciurak:7,night:[2,10],ocbox:28,unnecessari:[10,34,4,12],singletonpattern:27,underli:20,www:[20,32,10,11,1,12,21,16,7,28,14,35],right:[20,10,28,13,2,21,32,18,6,7],old:21,deal:[21,10,22,36],printf:32,interp:10,somehow:[10,34,21],percentag:2,intern:[16,21,1,4],borg:27,unless:[2,34,1,6],indirect:21,successfulli:[7,21,1],atteint:20,txt:[35,12],clash:21,bottom:[32,11],subclass:[9,10,12,4,21,19],suffici:10,condit:[9,11,1,12,4,32,35],foo:[13,3,10,14,27],core:[7,32,10],sensibl:[4,22],steamedmilk:19,confer:[2,13,21],promot:[2,21],repositori:2,pylist:10,post:[7,14],"super":[27,28],meyer:35,chapter:[32,10,11,1,2,8,21,16,13,33,35,37,14,19],unpackag:10,alexand:16,eat:31,getparametertyp:1,slightli:[9,12,1,28,5,14],py2float:10,surround:[32,21,35,28],unfortun:10,commit:[7,8],produc:[20,10,21,1,12,2,31,4,22,16,13,36,14],makeobstacl:4,dilemma:[31,21],thermostat:10,javac:10,curiou:18,basenam:6,"float":10,encod:22,bound:[2,31,10,21],mocha:19,down:[10,11,1,28,4,35,19],creativ:[2,21,17],weightvisitor:21,bizarr:14,cappuccinodecafwhip:19,wrap:[10,11,28,27,16,21,14,19],opportun:21,clearchang:28,javax:10,testdumpclassinfo:10,east:35,accordingli:13,wai:[20,10,11,1,12,30,2,31,28,4,32,13,34,5,36,7,27,21,14,19,29],frustrat:10,support:[9,10,1,12,2,3,4,32,21,17,7,28],iter:[20,9,10,1,12,4,32,16,21,26],why:[20,21,14],avail:[20,10,11,1,2,21,32],stuck:[10,1],reli:[16,21,5],editor:[7,13],fork:7,head:[20,11],medium:20,autonom:35,form:[20,9,21,1,28,2,15,4,16,32],offer:19,forc:[20,32,10,1,28,2,4,16,34,6],forg:1,heat:12,hear:1,dead:35,heap:[21,34],hashtabl:[],"true":[21,1,12,10,4,32],analyst:21,"6dd415847e5cbf7c":7,entryexit:14,pragu:21,setsuccess:11,maximum:[20,32],tell:[10,11,1,12,4,32,21,7,35],singletonmetaclass:27,absenc:1,fundament:[11,20,0,1,32],trim:21,classif:20,featur:[20,10,1,2,15,21,32,33,7,14],setxi:35,semicolon:32,classic:[21,12],howdi:10,stronger:32,"abstract":[20,9,21,4,36],flaw:1,sale:2,exist:[16,21,0,4,6],door:12,mold:[21,36],trip:2,assembl:19,inde:[27,10,21,14,1],surpris:[32,14],excel:16,refactor:[9,21,1,29],tij:37,test:[20,9,10,11,1,12,21,18,6,7,28,8],tie:20,presum:[21,4],smell:12,realiti:10,getsizetupl:28,notif:[20,28],intend:[2,10,1],felt:10,intent:[16,20,31],consid:[20,9,10,11,1,22,21,34,35,14,19],bitbucket:[7,9,8,29],receiv:[10,14,28],longer:[10,13,21,32,14,19],furthermor:11,intimaci:21,ignor:[21,27,1],inexpens:21,time:[20,32,10,0,1,12,2,28,4,16,13,11,35,27,21,14,19],push:7,backward:[35,29],osx:[7,30],concept:[20,9,10,0,11],chain:[9,11,12],nextstat:12,skip:1,consum:[10,5,19],focus:4,invent:[10,34],cafelattedecaf:19,objcount:1,milk:19,row:[28,12],decid:[21,12,28,31,10,4,32,34,19],depend:[20,21,29,12,10,4,28,8],decim:32,intermedi:2,certainli:[20,21,28,12,10,4,34,19],decis:[13,16,35,32],jvm:10,mainloop:28,jtextarea:10,isinst:[16,30],"__metaclass__":27,sourc:[20,10,1,12,2,21,13,7,28,35],string:[9,10,11,1,12,4,32,21,28,35],brazillian:2,onlyon:27,"fa\u00e7ad":[9,36],broadli:21,word:[11,1,12,0,36,14],exact:[21,4,12,22],valuabl:21,level:[20,21,1,28,4,32,6,14],did:[32,10,6],die:35,gui:[0,4,28],evalpap:22,vein:14,item:[28,10,4,12,22],team:[2,7,29,9],quick:[9,10,1,32,7,19],round:34,dir:[10,1,6],dict:[27,10,5,6],prevent:[9,21,1,28,4,34],plaincap:19,paintcompon:28,htm:35,compens:20,sign:[7,10,8],bondag:14,cost:[20,19,12],cafelattewetwhip:19,patient:10,corba:10,appear:[20,10,11,1,12,13,8,28,4,32,21,27,14,29],filler:21,scaffold:4,restfil:[10,6],current:[20,32,10,1,12,21,16,8,35],suspect:4,newalgorithm:11,shapefact2:4,deriv:[21,12,1,28,10,4,32,34],cappuccinodri:19,gener:[1,2,4,6,7,8,9,10,11,12,14,16,35,20,27,22,26,21,29,28,31,32,34,36],satisfi:[20,21,11,12,34],modif:[21,14,19],chainlink:11,address:34,along:[20,32,10,1,12,21,16,34],viabl:20,teacher:17,wait:[28,10,21,12],box:[9,10,1,28,4],messengeridiom:5,nextb:12,alti:28,shift:6,queue:11,behav:[10,14,21,12],extrem:[7,21,10,14,1],commonli:[10,21],trashtyp:21,semant:[32,1],regardless:[21,34],mazegen:35,extra:[32,28,21,1,19],activ:[13,31,21,4],modul:[32,3,10,14,28],prefer:13,toarrai:10,visibl:10,codemark:6,instal:[9,10,1,28,21,7],forefront:1,gsum:21,anounc:7,red:[35,28],newslett:20,prove:[21,14],univers:[20,4],visit:[31,10,21],recycleap:21,subvers:10,everybodi:28,live:10,handler:28,msg:32,scope:32,checkout:[7,8],testid:1,trustworthi:6,testpyutil:10,afford:11,peopl:[20,21,1,29,2,31,32,13,17,7,14],claus:[32,28,4,12],clue:21,visual:[7,9,28,13],appendix:2,rigid:10,oop:[20,21,1,28],examin:[10,21],obj:[16,32],jlabel:10,effort:[9,10,11,1,2,21,17],easiest:[7,9,10,31],fly:31,graphic:[35,1,28,4],prepar:14,dmitri:27,battl:[31,4],focu:[13,3,21],addel:35,flowlayout:10,problemsolv:11,can:[1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,27,28,31,32,34,35,36],purpos:[20,21,11,4],problemat:16,claim:11,encapsul:[20,9,21,11,12,4],stream:10,predict:14,wrapped_f:14,statet:12,backslash:[32,10],topic:[2,32,27],heard:21,chih:27,abort:[1,6],proxydemo:34,recycl:[9,21],simul:[20,9,21],occur:[20,21,11,1,12,13,4,22,28],pink:28,alwai:[20,27,0,1,29,10,32,21,8],killanddismemb:4,variou:[20,10,11,1,12,31,4,22,21,0,19],distinctli:12,ping:10,write:[20,9,10,0,1,12,2,4,32,16,13,11,6,28,21,34],anyon:[2,35],pure:[10,12],"0x00798900":27,parameter:21,ensconc:10,map:[10,12,31,21,32,35],product:[13,32,10,1],modal:10,book:[20,9,27,0,1,2,8,4,32,13,11,17,36,31,7,21,14,35,18],max:28,thermostatdai:10,spot:[13,4],usabl:12,wantmor:12,inputb:12,inputc:12,mac:7,inputa:12,mymethod:28,aop:14,mai:[20,32,10,11,1,12,2,28,4,16,13,33,35,7,27,21,19],underscor:[13,32,27],data:[9,10,11,28,12,4,32,16,21,5,27],grow:33,newlin:32,my_login:7,practic:32,johnson:20,secur:[10,14],explicit:[20,11,14,22],cafelattewhip:19,inform:[10,11,1,12,30,8,28,4,22,32,21,5,7,27,14,35],"switch":[21,11,35,34],preced:19,combin:[9,10,11,28,2,22,19],gamma:20,callabl:[14,28],talk:[7,20,10,21],vike:32,extractor:[8,1],dojo:17,mouseact:12,countobserv:28,greenhouselanguag:10,brain:[32,11],lst:10,codemanag:6,still:[20,10,21,28,12,2,4,32,13,6,7,8],skeleton:34,stringlist:21,dynam:[20,9,10,11,28,31,4,22,32,21,34,14,19],rosetta:17,group:[20,21,11,28,2,31,32,6,7,35,17],thank:[9,29],polici:0,jim:[21,11],platform:[9,10,30],window:[9,10,30,13,15,7,8],curli:32,borgsingleton:27,jtextfield:10,ddtrash:21,non:[20,10,1,2,21,32],dispens:12,halt:1,halv:32,sysconf_nam:30,alist:7,initi:[20,10,0,28,12,4,21,34,7,27,8,35],sorter:21,underneath:7,typedbinmemb:21,pyinteg:10,aesthet:21,therebi:1,half:34,javaclassinpython:10,now:[20,10,1,12,31,4,21,35,7,14,29],discuss:[20,21,35],introduct:[2,7,14,32,9],term:[20,21,11,1,12,34,36,14],name:[20,10,0,1,12,13,8,28,4,22,32,21,34,5,6,7,27,14,19],ppr:21,getweapon:31,didn:[20,32,8,1],oliv:19,phyast:14,separ:[20,10,0,1,12,31,4,32,21,11,7,28,34],rock:22,cafemochadecafwhip:19,pizza:19,jmap:10,compil:[20,10,11,1,28,21,32,34,6,18,14],domain:10,replac:[10,11,1,13,31,32,14],individu:[7,21,35,19],arg3:14,continu:[21,1,12,10,32,6],ensur:[7,20,34,1,6],parsetrash:21,significantli:14,begun:20,year:[16,20,21,1],happen:[20,10,21,1,12,2,4,13,28,14,19],dispos:10,troll:31,shown:[20,21,11,31,10,4,32,19],accomplish:[21,28,10,32,34,36,27],cafemochawhip:19,"3rd":[16,19],space:[21,13,10,32,34,6,35],profit:[2,10],antoin:20,profil:10,internet:[1,35],returnstr:10,factori:[20,9,21,12,4,36],earlier:21,"goto":21,occupi:32,getcwd:1,argu:[13,3,16,14,20],argv:6,lab:21,org:[10,11,1,29,14,32,7,28,8],"byte":[10,35],care:[13,32,21,4],reusabl:[16,21],couldn:[21,11,1],yarko:[7,8,29],synchron:28,recov:21,thing:[20,10,11,1,28,2,22,32,13,34,7,21,14],place:[32,10,21,1,12,2,4,16,13,5,17,7,28,14,19,18],greenhous:[37,10],principl:[20,9,21,1,12,36],think:[20,32,10,11,1,28,2,22,16,21,7,14,19],frequent:21,first:[20,9,10,0,1,12,32,28,4,22,16,21,34,6,36,7,27,14,19,35],origin:[10,1,28,14,21,16,35,8,19],directli:[27,0,1,2,10,32,21],carri:[21,11,12],onc:[20,10,28,21,6,7,14,19],arrai:[20,21,12,10,4,32,36,35],getcost:19,crib:30,yourself:[10,12,2,21,32,7],fast:[13,32,10,1],ring:10,open:[10,0,1,12,2,21,13,6,7,28],size:[2,28,10,1,19],given:[21,0,12,28,10,4,34,35],"__subclasses__":[31,4,22],width:[35,28],teardown:1,caught:12,clip1:21,plastic:21,necessarili:[13,0],circl:[4,12],showdigit:12,white:[9,21,1,28],conveni:[27,28,13,10,4,34,19],cite:35,includ:[20,32,10,28,1,12,15,27,16,21,17,7,29,14,19],simionato:14,changeneighbor:28,especi:[20,21,29,10,32,17],copi:[21,12,28,2,34,6,7],specifi:[10,1,12,2,4,32,7],broadcast:12,newcolor:28,enclos:19,enigma:21,changeavail:12,holder:21,than:[20,32,10,11,1,28,13,31,4,22,16,21,34,14,19],png:7,serv:[20,4],setattr:27,min:28,applet:0,were:[21,1,12,10,4,32,14],posit:[35,28],surrog:[11,36,19,34],seri:14,analysi:20,sai:[20,32,10,11,28,12,13,31,22,16,21,0,6,7,14],nicer:[7,36,28],svnroot:10,argument:[20,9,10,11,1,12,4,32,21,5,28,14],ant:10,prt:10,larri:21,deliv:10,breakfast:28,kevin:28,leastsquar:11,engin:[31,0,1],squar:[4,28],patternrefactor:[21,11],note:[1,4,6,7,14,9,10,11,12,13,15,16,18,19,20,21,27,29,28,32,33,34,35],altogeth:[20,21],ideal:10,take:[20,32,10,0,1,12,2,31,28,4,16,21,11,36,7,27,14,19,29],green:28,noth:[20,21,11,1,28,13,35],begin:[20,10,29,13,21,32,7,14],sure:[2,32,10],trace:[14,1,28],normal:[20,27,11,1,31,10,4,32,21],track:[21,12,28,2,34,5],price:[2,21,19,12],setchang:28,beta:10,pair:[21,36],neatli:34,televis:27,latex:[7,13,8,29],synonym:20,later:[20,10,11,1,4,21,7,27,14,19],drive:0,quantiti:[28,27,21,12],addbranch:7,runtim:[9,10,11,4],parseint:28,quiescent:12,shop:[2,19],shot:[21,19],linedata:11,show:[20,32,10,11,1,13,3,15,4,16,21,6,7,27,14],cheat:7,cheap:[20,21],subprocess:10,mousetrap2test:12,concurr:[3,9],permiss:[10,1],hack:[7,8],ground:10,xml:[10,36],onli:[0,1,2,4,6,7,14,10,11,12,13,16,19,20,21,22,27,28,31,32,34,36],explicitli:[32,21,10,14,4],nexta:12,fenc:20,nextc:12,transact:20,observedflow:28,enough:[10,1,28,13,21,4,7],doubleespresso:19,printstacktrac:[21,1],black:[9,1,28],analyz:20,jaroslav:21,clearselect:12,startswith:6,proxy2:34,nearli:1,viewpoint:21,get:[18,9,10,11,1,12,2,31,20,22,32,16,13,6,36,7,28,21,14,19,17],ddaluminum:21,cannot:[20,32,10,0,12,31,27,16,21],ssh:7,afunct:14,gen:4,requir:[20,32,10,1,12,4,16,21,33,5,6,36,7,28,14,19],truli:10,prime:[21,1,28],reveal:35,isemptyxi:35,aluminum:21,dramat:1,yield:[3,31,4,22],spameggssausageandspam:10,expedi:1,pynam:10,scott:20,where:[20,10,11,28,12,2,4,22,32,18,5,6,7,21,14,35],vision:2,summari:[9,10,21],wiki:[10,11,29,21,7,14],balabanov:27,pydictionari:10,booch:21,cafelattewet:19,testcas:[],overwhelm:7,rmi:34,purest:11,concern:[21,14,1],timeit:10,detect:[21,22,35,30],charat:10,review:[7,9,14,1],enumer:[16,6,12,22],label:[10,8,29],getattr:[27,34],trashbinset:21,between:[20,10,1,12,21,34,7,28],"import":[20,10,0,1,12,2,3,4,22,32,13,5,6,31,28,21],item2:22,across:[10,4],aslist:10,assumpt:[31,21],parent:[7,10],tup:10,screen:[21,0,1,28],inflex:19,cycl:32,pythoncardapp:28,findminima:11,come:[20,10,1,12,2,28,4,32,21,6,7,27,35],pythoncard:28,tug:7,newbyt:35,pepperdew:19,quiet:21,contract:2,inconsist:14,improv:[9,27,29,12,2,21,32,13,7],somecondit:1,minima:11,color:[13,35,28],overview:[7,9,21],unittest:[21,10,1,12],period:32,dispatch:[9,21,28,31,4,22],colorbox:28,jeremi:35,colon:[32,10],exuperi:20,mousetrap:12,coupl:[20,9,21],games2:4,west:35,rebuild:10,mark:[20,32],appframework:0,quiesec:12,reflex:20,procedur:21,runal:12,spare:32,emphas:[13,21,10,4],nameless:10,trantabl:12,cafelatteextraespresso:19,findal:6,rememb:[32,21,10,22],lectur:17,"__eq__":[22,12],former:[16,27],those:[20,10,1,28,2,4,22,32,21,5,17,7,14],ispubl:1,sound:[2,14],myself:[14,17],tostr:10,keygen:7,trick:[10,5,21],cast:[10,21,36],invok:[10,1,22,32,21,7,14,19],outcom:[4,22],invoc:19,anytim:[13,28],advantag:[16,21,10,27,12],stdout:10,canon:[9,15],ivi:7,worri:[2,13,16],endswith:[10,6],eras:[1,4],myapp:0,couplet:21,shutil:6,fame:21,"__init__":[32,10,0,1,12,35,28,4,22,16,21,11,5,6,36,27,14,19,34],develop:[20,9,10,1,2,13,7],author:[11,28],blackboxtest:1,same:[20,32,10,11,1,12,13,28,4,22,16,21,34,27,14,19],check:[10,1,12,28,4,32,21,6,7,27,8],binari:7,html:[10,29,13,8,21,32,6,7,14],testrunn:[],customize1:0,pai:[2,10,21],document:[10,1,28,13,8,32,7,14],martelli:27,number_of_processor:30,nest:[32,27,4,19],foam:19,someon:[7,8,28],driven:[37,9,1,12,35],mani:[10,1,12,2,27,32,21,7,28,14,19],extern:[9,21,1,12,6],tosynch:28,tradition:[32,1],hummingbird:28,appropri:[20,10,11,1,12,31,4,32,21],macro:[9,11,14],facad:36,pep8:13,gameenviron:4,without:[20,9,10,21,1,28,2,4,32,16,13,7,14,19],model:[20,31,21,28,19],dimension:[36,12],arrays2:32,execut:[9,10,11,1,28,4,22,32,21,7,14],tip:7,thermostatnight:10,rest:[20,10,0,1,12,2,4,21,6,7,14],recyclea:21,aspect:[20,10,14,4,28],recycleb:21,touch:[31,21],monei:[2,12],flavor:11,speed:10,pythondecoratorlibrari:14,except:[10,0,1,12,22,21,14],littl:[20,10,1,12,21,32,7,14,35],blog:7,pile:20,treatment:21,exercis:[9,10,11,1,12,31,28,4,21,0,17,36,27,19],frontmatt:8,mouseclick:28,real:[10,11,35,34],around:[20,21,1,28,13,31,4,32,34,5,35,14,19],todolist:[8,29],"0079ef2c":27,repaint:[35,28],grid:28,pop:[10,21],amp:[3,1],rununittest:1,appetit:20,returnarrai:10,mod:35,saniti:1,yearli:21,stranger:20,vend:[9,12],chainofrespons:11,integ:[32,10,28],benefit:[10,28,2,21,32,13,34,19],either:[20,10,11,28,22,32,19],output:[10,0,1,12,13,8,27,32,29,7,14,19],margherita:19,manag:[20,10,11,12,28,31,27],fulfil:[20,11,34],tulach:21,satisfactori:21,adequ:[20,32],constitut:28,nonzero:1,regina:19,slice:10,mood:12,chronicl:20,boxobserverpythoncard:28,definit:[21,0,1,2,10,32,34,14],evolv:[13,20,10,21,1],exit:[35,14,1,28,6],inject:[10,14],complic:[21,34,1,19],ratcount:35,refer:[20,27,21,1,12,2,4,22,32,13,34,35,7,19,18],power:[7,21,10,14,27],pythoninterpreterget:10,garbag:[10,1],inspect:[7,6],typedbin:21,standpoint:1,"__name__":[10,11,1,28,31,4,22,32,6,14,19],"throw":[16,10,1,12,4],comparison:[10,4,12],central:[16,21,12],greatli:21,max_num:21,firstnam:7,conditionc:12,panna:19,splitlin:6,currentlin:35,stand:[20,31,21,34],neighbor:28,act:[20,21,11,14],routin:34,effici:21,lastli:[16,10],val2:32,quietli:10,"75f":19,strip:[21,19,1,12,6],counterintuit:21,your:[0,1,2,4,6,7,9,10,11,12,13,15,16,19,20,21,22,27,28,30,31,32,34],wustl:21,log:28,aren:[13,20,36,1,32],commenttag:6,overwrit:6,hee:34,stealth:10,interfac:[20,9,10,11,28,12,31,4,32,16,21,34,36,19],low:[20,21],lot:[20,10,1,12,2,21,32],pollin:31,strictli:21,unam:10,svn:10,tupl:[32,10,5,22],bundl:36,regard:20,vendingmachin:12,stepanov:16,conciev:12,"0076aa3c":27,functor:11,mice:12,conclus:16,faster:[10,1],notat:10,tripl:32,jc2:10,impenetr:1,possibl:[20,10,21,1,12,2,4,32,13,34,35,27,14,19],"default":[21,11,1,28,30,10,7,35],asynchronizedmethod:28,grasp:32,embed:10,clone:[7,21],connect:[20,21,11,28,12,10,27],gone:[10,11],creat:[0,1,2,3,4,5,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,27,28,29,31,32,34,35,36],certain:[21,10,15,19,12],mode:[2,7,10,6],strongli:32,intro:8,file:[9,10,0,1,12,13,15,21,32,11,6,7,28,8,35],jargon:31,rearrang:16,cream:19,incorrect:16,again:[2,21,10,1,32],setval:10,googl:7,want:[20,32,10,11,1,12,2,28,4,22,16,13,34,5,36,7,27,21,14,19,29],discrimin:32,my_decor:14,compel:[20,10,6],awt:10,orient:[20,21,11,10,4,32,14],idiom:[20,9,11,28,24,34,7],valid:[10,1],compet:22,jset:10,you:[0,1,2,4,5,6,7,14,9,10,11,12,13,15,16,18,19,20,21,22,27,28,30,31,32,34,35,36],getdescript:19,inneradapt:36,architectur:[2,20,10,28],check_result:6,critic:10,inevit:21,registri:10,sequenc:[20,32,10,11,12,21,16],tbin:21,vocabulari:20,pool:27,reduc:[1,19],bulk:[13,21],differentreturn:32,opennotifi:28,directori:[10,1,13,21,6,7,8],descript:[10,1,12,27,21,6,7,8,19],showmsg:32,gradient:20,mass:28,potenti:[20,28],escap:12,fillabl:21,represent:12,all:[0,1,2,4,6,7,14,10,11,12,13,16,18,19,20,21,22,27,28,31,32,34],dist:10,consider:[9,21,19],messi:[21,22,30],recip:9,lack:[10,1],dollar:12,sanitycheck:1,monti:32,abil:[20,28,2,31,13,14],follow:[20,10,21,1,12,2,4,22,32,13,34,5,7,28,14,19],princ:20,unclassifi:21,edong:7,"__cmp__":[10,12],init:0,program:[20,9,10,11,28,1,12,32,2,15,4,22,16,13,6,27,21,14],hasattr:30,rstrip:6,cgi:[32,21],introduc:[20,10,1,2,21,13],"case":[32,10,11,1,28,2,4,22,16,21,34,5,27,14,35],liter:[32,22],straightforward:[20,10,21],fals:[21,10,6,12],checkin:[7,8],faq:7,util:[32,10,1,28,16,7],defvar:7,candid:[16,20],mechan:[9,21,0,13,22,16,32,11,14,34],failur:[20,11,1],veri:[20,9,10,11,1,28,2,4,22,32,13,7,27,14,35],bottleneck:10,bruceeckel:[7,16,10,20,1],lisp:14,list:[20,9,10,0,1,12,2,8,4,22,32,21,11,5,6,7,28,14,29],signific:[13,16,21,1,35],emul:28,small:[2,13,20,19],everth:15,dimens:28,pyobject:10,tea:19,tee:34,tex:7,zero:[10,1],shapefactori:4,design:[20,9,10,11,1,12,13,31,28,4,32,16,21,34,6,36,27,14,19],pass:[10,11,1,12,31,28,4,22,32,21,34,5,36,7,27,14,19],whene:34,further:[9,10,1,28,13,3,21,32,14],new_f:14,what:[1,2,3,4,6,7,14,9,10,11,12,13,16,18,19,20,21,27,28,32,34,36],sub:6,ntotal:21,hashset:10,abl:[20,10,0,1,12,2,4,22,16,13,11,21,35,34],brief:32,overload:[32,10,21],version:[10,21,28,12,2,8,4,22,32,13,36,7,27,14,18],succinct:[10,14],fillbin:21,"public":[20,10,1,2,21,13],contrast:32,movement:[20,21,11],hasn:[21,28],full:[7,32,10,34,6],hash:[16,32,12],variat:[20,27,36,21,12],sophist:[32,10,1,4],rlock:28,shouldn:[7,11],trunk:[7,9,10],demet:20,rudimentari:32,modifi:[10,21,1,12,2,31,28,4,22,32,13,7,27,14],valu:[10,1,12,22,32,21,5,36,14],search:[9,21,0,1,32,7],upcast:[21,4],ahead:[32,1],vegetarian:19,popen:10,prior:21,amount:[21,11,1,12,15,10],"0076daac":27,pick:21,action:[20,9,10,11,12,4,21,34],introductori:[9,10,2,32,7,14],scurri:35,pytupl:10,via:[2,7,10,21,22],shorthand:10,primit:[10,21],transit:[9,12],"while":[20,10,11,1,12,2,21,32,34,35],readili:20,filenam:[21,6,35],inappropri:[10,1],ystart:35,famili:[21,11,22],establish:[16,32,21,1,12],jbutton:10,select:[20,9,10,11,28,12,13,21,7,19],kittiesandpuzzl:4,aggress:32,twa:10,proceed:21,distinct:[20,21,11,12,10,34,27],regist:[7,28],two:[10,0,1,12,2,31,28,4,22,32,21,34,6,36,27,14],coverag:[8,29],getweight:21,repetiti:15,machinediscoveri:30,taken:[13,21,10,1,4],showtot:12,minor:28,more:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,17,19,20,21,22,27,28,29,31,32,34,35,36],visitabledecor:21,desir:[10,11,5,21,28],mydialog:10,apologet:14,reconfigur:31,convinc:1,ddcardboard:21,flag:[10,28],stick:14,particular:[20,32,10,11,1,12,2,4,16,21,34,35,7,27,19],known:21,compani:[2,10],cach:10,dictat:2,none:[27,10,28,1,12],pyprog:1,jdk:[10,1,28],dev:7,histori:[7,9,14,6],testdemo2:1,remain:[16,21,12],caveat:[18,1],learn:[20,21,2,32,13,7],returnchang:12,statedemo:34,dee:34,def:[32,10,0,1,12,30,31,28,4,22,16,21,11,5,6,36,27,35,14,19,34],prompt:7,scan:13,challeng:35,share:[2,7,27],accept:[7,16,10,21,31],prose:13,minimum:[7,32,10,28],explor:16,explos:21,phrase:1,magenta:28,condemn:21,huge:19,cours:[20,10,1,29,2,4,21,34,36,19],goal:[20,9,10,1,12,2,21,32,14,35],awkward:10,divid:1,programmat:19,anoth:[20,10,11,28,12,31,4,32,21,34,7,27,14,19],comfort:[1,36],myratno:35,ish:[13,32],smalltalk:[20,28],simpl:[9,10,0,1,12,4,32,21,34,36,7,28],css:[8,29],distro:10,plant:21,resourc:[9,1,28,36,8,35],algebra:16,variant:21,reflect:[9,10,21,1],associ:[32,10,21],"short":[32,30],waysid:1,ani:[20,32,10,21,1,12,2,28,4,16,13,34,35,7,27,14,19],confus:[21,28,31,32,36,14],mousemovelist:12,ambigu:10,caus:[20,10,1,12,31,4,21,7,28],flwr:31,drinkcompon:19,egg:[32,27],sysctl:30,help:[20,21,28,2,3,13,34,17,7],soon:1,held:[20,34,12],pythondialog:10,paper:[21,22],through:[20,32,10,11,1,12,2,28,4,22,16,13,34,27,21,14],cyan:28,hierarchi:[20,21,11,31,4,22,34],taxonomi:[20,9],makeschang:12,paramet:11,latt:19,style:[11,1,29,13,12,32,8],conjugategradi:11,alli:17,late:[21,19],rapidli:[10,28],astonish:20,pythondecor:14,match:[31,21,11,22,28],might:[20,10,11,1,28,2,4,22,16,21,14,35],currentst:12,wouldn:[21,1,4],good:[20,10,1,12,2,21,32,13],"return":[32,10,11,1,12,30,31,28,4,22,16,21,34,5,6,36,27,14,19,35],pollut:20,ttbinlist:21,framework:[20,9,10,0,1,12],somebodi:[2,7],placehold:12,complain:32,bigger:[10,12],whatiw:36,intricaci:4,customize2:0,hook:28,solver:11,instruct:[7,1],refresh:[8,6],easili:[20,10,11,1,12,27,22,21,5,36],achiev:[21,10,14,27,19],compris:14,getmodifi:1,found:[20,21,1,14,35,7,8,19],strategypattern:11,proxyadapt:36,harm:[9,21,12],weight:21,hard:[13,16,21,4,31],idea:[20,10,11,12,2,8,4,13,34,17,7,21,14],ndiff:6,realli:[20,21,11,12,10,32,36,27],finish:[20,10,1,12,7,14],expect:[20,10,21,22,32,18,14],windowadapt:28,ddpaper:21,detect_cpu:30,todo:[9,10,29,6,7,8],event:[20,10,0,35,28],flower:[9,28,31],safeti:[32,1],classvariablesingleton:27,multiplejython:10,actionperform:10,setsiz:[35,28],publish:[2,21,10,1],research:[2,10,36],footnot:[20,10,11,1,12,27,21,8],gameelementfactori:4,print:[0,1,2,4,5,6,8,9,10,11,12,13,14,35,21,22,27,28,31,32,34,19],qualifi:[32,1],lutz:32,proxi:[20,9,10,12,27,16,34,36,19],advanc:[2,11],reason:[20,10,11,1,12,2,4,32,21,34,36,14,19],base:[20,10,0,1,12,2,31,28,4,22,32,21,11,7,27,35,34],put:[20,9,10,21,1,12,2,8,4,32,13,5,6,7,27,14,17],teach:[2,9,1,17],bash:1,basi:[1,28],thrown:21,thread:[7,35,28],script:[13,9,10,11,32],struggl:20,revolutionari:1,perhap:[21,1,13,31,10,4,36],pythonsw:10,ascher:32,trashsort:21,lifetim:34,clump:5,assign:[7,14,10,5,32],major:[32,14],notifi:28,obviou:[16,21],blush:21,feel:[7,13,20,1],articl:[3,15],lastnam:7,number:[20,10,11,1,12,30,13,27,22,32,21,34,35,36,7,28,14,19],sometim:[20,10,0,13,21,36,7,14],sayhello:14,done:[10,11,1,29,2,4,32,13,7,28,8],construct:[16,10,14,1],colorboxestest:28,stabl:10,miss:[20,21,10,6],fanci:12,gpl:10,razor:20,differ:[20,32,10,11,1,12,8,4,22,16,21,34,6,31,7,28,14,19],php:28,exponenti:[20,19],interact:[31,10,4,36,22],tove:10,least:[20,10,1,21,32,7],addfactori:4,paint:[13,35],expand:[7,34],statement:[10,11,1,12,4,32,21,34,28,14],scheme:[31,21,28],syrup:19,store:[14,1,12],itempairgen:22,imperfect:13,option:[20,11,28,2,32,6,7,19],relationship:20,behind:[20,34],checklist:20,shapefactory1:4,shapefactory2:4,part:[20,9,10,0,1,28,2,8,21,25,32,23,24,11,6,7,14,19,35],pars:[32,9,21,22],consult:2,closenotifi:28,eventu:[20,1],tortoisehg:7,albeit:[20,32,10,21],kind:[20,32,10,1,12,2,31,4,22,16,21,34,28,14],plop:21,whenev:[20,21,0,28,4,5,7,14],remot:34,gotten:12,remov:[20,21,12,28,2,16],kapow:10,pythoninterpret:10,reus:[20,27,0,12,10,21,11],getconstructor:[10,21],toward:[20,1],danc:34,weapon:31,runsawai:12,comput:[10,21],nastyweapon:4,ardent:1,requisit:1,"null":[34,1,12,35],gettotalcost:19,sell:2,imagin:[21,4],wilson:14,built:[20,9,10,11,1,28,2,21,32,34,7],equival:[32,21,10,1,28],jythonc:10,self:[20,32,10,0,1,12,35,31,28,4,22,16,21,11,5,6,36,27,14,19,34],violat:10,typediter:16,also:[20,32,10,11,1,12,2,28,4,16,13,35,17,37,7,27,21,14,19,29],bgboxobserv:28,build:[9,10,0,1,32,2,31,4,16,13,36,7,21,8],mouseev:28,brace:32,distribut:[7,13,10,4],exec:10,blackboard:35,eater:31,lighton:10,reach:[20,11,35],mixtur:19,addobserv:28,most:[20,10,0,1,28,2,4,21,11,5,14,19],plai:[31,21,4],cygwin:7,eaten:31,thidiscuss:11,maco:30,alpha:10,amaz:[10,14,35],fileread:35,clear:[2,20,14,28,12],cover:[2,13,33,0,1],roughli:[1,12],"_shared_st":27,ext:[8,29],clean:[32,21,10,1],jython2:10,xstart:35,usual:[20,10,0,1,21,32,5,14],mousetrap2:12,mousetrap1:12,ccolor:28,flowergen:31,canvaswidth:35,particularli:[13,32,21,22],uncov:10,font:[2,10],fine:[21,4],find:[20,10,11,1,2,4,32,13,7,21,14,19],impact:[21,14],flesh:10,solut:[20,10,11,1,12,28,4,22,21,27,19],pyutil:10,templat:[9,10,0,12,2,4,32,16,13,11,21,14],darkgrai:[35,28],shapefact1:4,affirm:[32,1],unus:20,cappuccinodecaf:19,express:[20,10,1,13,22,32],entry_exit_class:14,swing:10,nativ:[7,10],mainten:[21,19],wateroff:10,ineffici:28,doubli:28,cyclic:12,stl:[16,10,11],common:[20,10,1,12,2,4,32,21,34,17,28],wrote:[10,1],commod:21,cafemochawetwhip:19,pyexcept:10,adopt:1,creator:[7,11,29],cleverli:13,startup:[7,10],potent:10,emac:[7,9,8],bare:28,aluminumbin:21,arg:[27,1,28,10,32,21,7,14,35],close:[28,1,12,35],horizont:35,skill:11,analog:32,dwarf:31,expert:[13,11],someth:[20,10,11,1,12,2,31,22,32,13,17,36,28,21,14,19],particip:7,conditionb:12,conditiona:12,weakli:[],testb:1,won:[10,28,2,21,32,13],mutex:28,autogener:[8,29],experi:[2,20,10,14,1],nope:1,birkenfeld:7,altern:[20,10,1,3,21,14],signatur:[32,10],str:[32,28],numer:[0,5,11,22],hasnext:[16,21,10,1,12],complement:20,sole:11,isol:[20,21,11,4],statemachin:[9,12],disallow:4,cachedir:10,getmethod:[10,21],solv:[20,10,11,1,12,3,22,32,21,34,36,31,28,35],extraespresso:19,both:[20,10,28,13,4,22,32,21,34,35,7,27,14,19],"__instanc":27,last:[31,10,0,21],hyperlink:8,arraylist:[10,21],alon:[21,28],undetermin:0,context:[9,11,8],forgotten:15,commandpattern:11,whole:[21,11,1,12,2,10,28],load:[21,10,4,36,7,35],randomli:[31,1],simpli:[20,32,10,0,29,12,31,21,16,34,5,36,28],point:[20,27,11,1,12,30,2,4,32,13,7,28,21,14,35,18],schedul:[31,10],sweep:1,arbitrarili:[10,34],header:7,templatemethod:0,loveandtheft:14,param:10,linux:[7,8,30],throughout:[20,21,0,1,13,4],identif:21,java:[9,10,1,12,32,4,22,16,21,34,6,18,28,14,35],dum:34,due:1,empti:[35,28],implicit:14,mercuri:[7,9,8,29],newinst:[21,1],nois:1,pushnew:7,strategi:[9,11,6],addison:[21,11],versa:32,execfil:10,clariti:[13,19],imag:[13,28],remark:[32,10,21],coordin:35,changeimp:34,understand:[20,10,12,13,27,32,21,14],demand:[2,32,34,1,4],makedir:6,fillablevisitor:21,look:[20,10,11,1,12,13,8,28,4,32,21,34,31,7,27,14,19,29],packag:[32,21,10,1,12],frozen:28,buildtabl:12,getquant:12,decrquant:12,smart:[10,34,12],abov:[20,10,11,1,28,2,8,15,4,32,13,34,31,7,27,21,14,19],error:[21,1,12,13,10,6,28],fun:14,anonym:[9,21,37],fum:10,everyon:[29,28,2,32,13,17],loop:[20,21,0,10,4,32],pack:10,argin5:10,propag:[20,21,28],pound:32,argin1:10,argin3:10,argin2:10,readi:[2,7,21,0,35],petal:28,itself:[20,10,11,12,13,21,14,35],orgpattern:21,coroutin:[3,9],chase:4,decor:[9,27,28,14,21,16,8,19],guido:29,restructur:[2,7,6,13,9],minim:[20,1,28],boxwidth:28,belong:2,on_openbackground:28,shorter:10,read:[20,9,10,0,1,12,30,2,3,21,32,6,28,14,35],conflict:7,higher:7,cappucino:19,vertdir:35,optim:[10,21],painless:21,wherea:[32,10,11,21,12],ponder:20,setbackground:35,user:[9,10,28,12,2,4,16,21,7,27],stack:28,focal:20,recent:[10,1],lower:20,task:[7,13,28],lib:32,eleg:[20,27,21,32,34,14],entri:[13,8,10,14,35],localarrai:28,propog:28,parenthes:32,person:[7,10],testpythontojavaclass:10,chees:12,expens:[21,34],elev:[21,12],academ:1,imit:[7,32],propos:[7,20],explan:10,pyfloat:10,valueof:21,obscur:20,choru:34,world:[20,10,11,14,1],"67f":21,dumpclassinfo:10,dirlist:11,cut:[21,36,28],indexof:[10,21],mydecor:14,getreturntyp:1,snag:28,win:[31,10,22],input:[3,0,12],subsequ:[32,12],brainstorm:20,bin:[7,21,10,1],tomap:10,vendor:[31,21],format:[2,7,32,13],big:[32,10,14],intuit:10,game:[4,28],alias:34,insert:[32,21,27,6],verion:7,bit:[32,10,28,2,21,4,16,34,14],characterist:0,formal:[32,14],lost:[10,21],docutil:[],signal:10,resolv:21,fluf:13,collect:[20,21,11,1,12,27,36],"__new__":27,sizeabl:19,javabean:10,encount:[21,1,28,10,4,16],sketch:13,often:[20,10,11,1,12,2,31,15,21,32,13,5,17,36,28,14,19],acknowledg:[20,32],creation:[20,9,10,21,1,12,2,28,4,32,16,13,27,14],some:[0,1,2,3,4,5,7,8,10,11,12,13,14,17,35,20,22,21,29,28,30,32,36],back:[20,10,11,1,12,2,21,28,14,35],global:[10,1],understood:[10,1],wxpython:28,mirror:20,sprint:2,mindview:10,mousepress:28,syndrom:21,rien:20,scale:[3,10,1],chocol:19,mousemov:12,though:[21,27,14,1,28],per:[20,28,19,12,32],usernam:7,substitut:[32,14],mathemat:[11,22],larg:[2,3,21,33,12],market:31,fornam:[21,1],reproduc:2,norvig:28,machin:[7,9,12,30],previou:[21,12,2,4,14,19],run:[20,9,10,0,1,12,21,32,11,6,7,28,14,35,34],martin:[21,14],agreement:10,stem:10,step:[20,32,10,1,2,4,16,21,7],initialst:12,subtract:20,impos:[16,12],sellimaginaryproduct:31,constraint:[20,32,21,12,2,16,14],materi:[2,13,10,17],memori:1,libero:12,dialog:10,cappuccinodrywhip:19,block:[13,6],plan:10,predat:31,repair:21,"__future__":[31,4,22],pythonpath:32,within:[20,21,28,12,10,4,32,14],oreilli:32,"caf\u00e9":19,contributor:[2,9,8,29],chang:[20,9,10,0,1,12,13,31,28,4,21,33,34,6,36,7,27,14,19],artifici:1,connector:20,inclus:[20,32],institut:1,spam:[32,27,28],valuminum:21,question:[7,20,10,21,12],submit:1,custom:[7,10,0,21,19],clip3:21,clip2:21,adjac:28,arithmet:35,pocoo:[8,29],clip4:21,forward:[20,10],jarrai:10,blueprint:[2,7],convert:[10,0,12,28,16,8],properli:[21,10,14,22],hawaiian:19,sc_nprocessors_onln:30,link:[7,13,11,8],translat:[20,9,10,21,1,12,2,4,22,16,13,28,8,35],delta:6,line:[9,10,0,1,12,8,15,21,32,11,5,6,7,28,14,35],talli:21,info:[21,5,28],concaten:32,consist:[20,21,1,28,13,4,32,19],caller:[21,4],strang:[32,4,12],jpython:10,priveleg:10,fillrect:[35,28],readlin:[10,21,12,35],similar:[20,10,11,1,12,21,32,34,28,14],toomuchaccess:1,parser:21,chao:1,doesn:[20,10,21,28,12,2,8,27,22,32,13,6,36,14],repres:[32,21,12],"char":[10,35],guarante:[7,12],cafe:19,fulful:11,titl:[10,28],water:10,windowi:7,appendic:13,intvalu:10,tbinlist:21,"_imag":13,addmouselisten:28,getbound:35,cappuccinoextraespresso:19,nice:[2,7,32],draw:[0,4,35,22],getdeclaredclass:1,cappuccinoextraespressowhip:19,state_d:34,topydictionari:10,eval:[4,22],itemavail:12,pricevisitor:21,lang:[10,21],algorithm:[20,9,21,11,28,4,16,35],vice:32,downcast:21,actionlisten:10,entryset:10,normpath:6,tradeoff:19,jpanel:28,greenhousecontrol:10,mindlessli:21,karma:[2,13],far:[20,32,21,1],java2pi:10,hello:[10,14,12],prototyp:[20,9,10,21],code:[0,1,4,6,7,8,9,10,11,12,14,15,16,17,35,20,21,28,31,32,34,19,37],partial:32,hashmap:[10,21,12],scratch:[10,14],tclone:21,overlap:28,edu:[21,14],benevol:2,privat:[27,0,1,28,10,7],successfuli:10,elsewher:13,friendli:1,send:[2,32,10,34,21],granular:1,becam:1,paperscissorsrock2:22,sens:[20,10,11,1,4,32,21,5,14,19],junit:1,sent:10,func2:14,func1:14,cheapli:[10,21],mainstream:14,sausag:27,mous:[28,12],testdemo:1,electron:[2,13],chdir:1,volum:[2,13],whatius:36,implicitli:[20,32,10,4],kitti:4,tri:[10,11,21],troup:32,magic:27,succeed:11,counterproduct:21,knight:34,button:[7,10,4],hive:27,"try":[20,10,11,1,28,13,21,36,7,14,35],session:12,mousetraptest:12,pleas:[2,7,8,18],boxobserv:[1,28],fortun:21,readabl:32,natur:[21,1,28,13,32,14,35],verbiag:32,elisp:7,jump:14,slithi:10,binset:21,singletondecor:27,download:[2,7,10,16,28],odd:[34,19],click:[7,13,28],append:[10,11,1,28,32,6,7],compat:29,index:[9,10,11,13,21,5,7,8],getclass:[16,31,10,21,12],compar:[7,21,10,11,1],espresso:19,access:[27,1,28,4,32,34,14],deleteobserv:28,runuculu:31,mouseadapt:28,spoken:21,whatev:[13,21,1],ibid:20,absolut:32,len:[11,35,1,28,6],closur:14,let:[10,1,12,13,4,21,14,19],becom:[20,32,10,1,12,21,16,28,19],sinc:[20,10,11,1,12,4,32,21,34,28,14,19],great:[2,18,10,20],talent:2,convers:10,musser:16,larger:[21,29],makec:36,makeb:36,makea:36,fetch:[21,28],staticmethod:[27,14,4,36,6],earli:[13,18,10,1],typic:[20,21,11,1,12,32,0,5,14,19],ratcanmov:35,evalrock:22,chanc:11,transitiona:12,appli:[20,21,12,1,28,32,36,14],app:28,foundat:[9,23],"_updat":6,pyton:10,fillablecollect:21,hennei:20,"boolean":[10,21,12,35],notenough:12,limb:14,newimp:34,puriti:10,fee:10,from:[0,1,2,4,5,6,7,8,9,10,11,12,13,14,16,17,18,19,20,21,22,27,28,30,31,32,34,35,36,37],sysconf:30,zip:[7,6],commun:[2,10,35],doubl:[9,21,31,10,4,32,22,27],addtrash:21,whatihave3:36,whatihave2:36,implic:19,few:[5,19],camera:2,usr:[7,1],stage:[20,21,19],remaind:[7,9,21,8],sort:[20,32,10,11,21,16],clever:20,src:7,tplus1:14,impress:[10,21],train:2,bufferedread:35,iii:[9,25],starter:35,account:[7,1,19],alik:2,retriev:[],when:[20,10,11,1,12,2,31,4,22,32,18,34,35,36,7,28,21,14,19],annot:[14,12],thin:4,meet:[31,21,12],scatter:21,aquamac:7,proof:21,control:[20,9,10,11,28,12,13,4,32,21,34,7,27],cafemochawet:19,process:[20,32,10,0,1,12,13,4,22,16,21,11,7,14,19],lock:[2,14],high:[20,21],tag:[13,4,12],trashvisitor:21,csum:21,onlin:[13,28],kevlin:20,delai:[10,12],friendlier:7,comedi:32,georg:7,shapenamegen:4,sig:10,feta:19,subdirectori:[21,10,1,6],instead:[20,10,11,1,12,4,22,21,7,28,14,19],sin:10,stock:7,overridden:[32,21,0,1,12],pyarrai:10,hazard:11,callback:[21,11,28],rmtree:6,multipl:[9,10,11,28,13,31,27,22,32,21,7],"120dpi":7,cheaper:20,physic:35,alloc:1,drop:21,essenti:[20,21,11,1,10,32],seriou:1,correspond:[21,5,1,19],element:[20,21,1,12,10,32,14],issu:[13,20,27,21],allow:[20,10,11,29,12,31,4,21,0,28,14,34],subtyp:21,horizdir:35,espressodecor:19,move:[20,10,11,1,12,2,21,13,35,7,28,8,29],evolutionari:21,comma:32,bunch:21,perfect:[2,13,21,20],outer:[27,10,36,1,28],chosen:[2,28],settitl:28,gnomesandfairi:4,newsgroup:7,decaf:19,criterion:28,tst:1,typemap:21,rat:[9,35],factor:[20,32,10,1],greater:10,"__getitem__":10,handl:[20,32,21,0,8],auto:7,spell:2,dai:[2,10],ctor:21,devel:7,dat:21,mention:[2,21,11,1,4],snake:32,front:[9,34,19],strive:21,multiprocess:3,somewher:[7,4,28],anyth:[20,10,1,28,2,21,13,14],edit:[7,9,21,16,32],tran:12,quest:20,trap:12,isclass:6,batch:32,reserv:1,newtonsmethod:11,psum:21,flair:13,subset:[21,19],chung:27,tolist:10,openobserv:28,transitionb:12,transitionc:12,nodecor:19,"static":[20,10,1,12,4,32,21,6,36,27,19],"_delta":6,whet:20,our:[10,14,21],patch:[7,28],transitiont:12,special:[21,10,4,32,34,7],out:[20,9,10,21,1,12,30,2,28,4,22,32,13,7,27,14,18],variabl:[7,32,27,12],matt:14,contigu:28,cwr:35,dongwoo:7,stub:34,texliv:7,suitabl:10,rel:21,leverag:10,ref:7,"23f":21,math:[10,21,28],clarifi:2,insid:[10,1,12,4,32,21,36,7,28,14],sortintobin:21,manipul:[16,10],standalon:7,dictionari:[10,12,4,22,32,5,36,8],tempt:34,releas:[28,1,12],embarrass:1,correcton:2,could:[20,10,11,1,12,2,28,4,32,21,34,5,27],ask:[20,10,28,4,16,21,35,7,19],membership:21,keep:[20,10,21,1,12,2,4,13,34,5,7,28],length:[21,12,1,28,13,10,35],enforc:1,outsid:[32,21,10,4],south:35,softwar:[7,1],qualiti:[20,1],scene:34,echo:[],date:10,set:[9,10,0,1,12,2,28,4,22,32,21,11,6,36,7,27,14,19],flyweight:12,newsingleton:27,facil:2,redund:11,cafemochaextraespressowhip:19,prioriti:7,"long":[10,21,2,4,32,13,34,7,27,14,19],start:[20,9,10,0,1,28,30,2,27,22,13,7,21,14,35],unknown:[21,22],licens:[2,9,10,27,17],perfectli:12,mkdir:10,system:[20,10,11,1,12,30,2,31,15,4,22,13,7,21,35,18],messag:[20,10,12,1,28,32,7],attach:[13,9],termin:[32,11,1,35],"final":[20,10,0,1,28,2,31,21,13,35,7,14,19],shell:[7,32,10],rsa:7,exit_on_clos:[10,28],slider:4,rst:[2,7,8,6],exactli:[32,10,21,19],readlinelib:10,haven:[13,21],python3pattern:[7,8],cpython:10,embodi:20,split:[6,28],see:[0,1,2,4,6,7,8,10,11,12,14,16,18,19,20,21,27,28,32,34,36,37],structur:[20,9,10,11,1,12,21,16,32,34,35,19],charact:[10,4],bind:[2,21,22],steer:35,imho:32,aggreg:21,isstat:1,clearli:[20,21,19,1,12],have:[0,1,2,4,6,7,14,10,11,12,13,15,16,17,18,19,20,21,22,27,29,28,31,32,34,36],tabl:[9,12,31,22,16,32,34,37],need:[0,1,2,4,5,7,8,10,11,13,14,17,19,20,21,22,27,28,29,31,32,34,36],imatix:12,turn:[20,10,1,12,2,21,32,34,35,28,8,19],gentli:14,lightgrai:[35,28],messeng:[9,21,11,12,5,6],rout:20,rmic:34,mix:21,discret:10,sei:1,which:[0,1,2,3,4,5,6,7,14,10,11,12,13,15,16,19,20,21,22,27,28,31,32,34,35],linda:16,singl:[10,11,28,12,13,4,22,32,21,34,7,27,14],uppercas:0,entry_exit:14,"5b0":10,htmlhelp:7,who:[21,28,29,2,13,17,7,8],minimasolv:11,discov:[20,9,21,1,30,13,4,7],rigor:1,textui:[],mactex:7,"class":[0,1,4,5,6,14,9,10,11,12,16,35,20,27,22,21,28,31,32,34,19,36,37],changealgorithm:11,wikic:21,gather:20,request:[20,11,35,12],face:21,pipe:10,bui:2,michel:14,determin:[32,21,11,12,4,22,16,35],fowler:[21,14],occasion:1,constrain:1,fact:[20,27,1,28,10,32,21,14],statemachine2:12,dbm:12,text:[9,12,2,15,32,13,6,7,35],whatiuse2:36,bring:[20,10,2,21,32,14,35],developerguid:8,debat:13,trivial:[21,10,1,12],anywai:[13,32,11],pythoncardprototyp:28,redirect:[27,10,1],textual:28,locat:[10,11,1,12,21,7,8],launchpad:[2,13],createbox:28,hadn:12,winner:31,jar:10,mug:19,should:[20,32,10,11,1,12,13,3,4,16,21,35,7,28,14,19],smallest:[21,19],suppos:[21,1,28,10,4,32,14],esqu:32,disciplin:14,inhabit:31,local:[20,21,28,2,7,19],hope:[20,8,17],overidden:12,contribut:[2,7,29,13,9],espinc:21,ludicr:21,familiar:[7,16,21],disagre:6,autom:[21,1,12,13,15,10],regularli:[21,19],piecewis:11,bean:10,increas:1,applicationframework:0,triangl:4,extract:[21,10,1,6],enabl:[10,14],organ:[2,7,21,20,1],bisect:11,coplien:[21,11],grai:28,stuff:13,integr:[32,21,11,1,28],contain:[20,9,10,28,12,4,32,16,21,6,36,7,27],grab:21,ddglass:21,view:[13,28],conform:19,"0079e10c":27,frame:[10,35],knowledg:[32,1,4],popen2:30,dynatrash:21,temporarili:10,distract:10,py2int:10,syntact:31,polymorph:[9,21,31,4,22,32],statu:21,wire:[27,21],dlg:10,correctli:[7,1],pattern:[20,9,10,11,1,12,31,28,4,16,21,25,6,36,7,27,14,19,34],boundari:[7,10],misus:[20,21],tend:[20,32,21,1],favor:20,state:[20,9,27,11,28,12,4,32,21,34],japplet:0,progress:[7,8,14],email:[7,20],pazzaglia:16,bed:28,kei:[21,12,31,10,22,32,36,7,19],p2j:10,itertool:[26,9],job:[2,32,21,0],entir:[20,10,28,21,32,14],measur:13,cafelattedecafwhip:19,addit:[10,1,12,2,21,32,34,7,28,14],exclaim:32,boxheight:28,admin:13,invulner:21,equal:[20,21,10,1,32],etc:[21,11,2,4,22,18,0,7,14,19],admit:[20,21],instanc:[27,1,12,10,22,19],equat:14,section:[20,10,31,21,4,33,36,7,8],freeli:[16,10,1],comment:[7,32,10,1],make_fil:6,interp2:10,"0076c54c":27,simpleclass:32,wall:35,guidelin:[13,21],kungfugui:4,arriv:21,chmod:10,walk:[20,10,1,6],distinguish:[21,10,8,1],incess:29,respect:21,labor:20,quit:[10,1,12,13,4,32,14,19],htmldiff:6,decent:20,obstacl:4,compon:[16,28,10,21,19],treat:[21,10,1,12],nextto:28,immedi:[21,14,1,35,4],interactwith:4,assert:[36,1,12,4],espressoconpanna:19,togeth:[10,11,21,32,34,36],present:[20,21,1,12,10,36,19],multi:12,main:[10,0,1,28,2,21,32,7,35],plain:[7,19],align:32,harder:10,defin:[20,32,10,0,1,12,28,4,16,21,5,27,14,19],aarrgggh:35,decept:10,observ:[20,9,27,1,12,21,28],cafemocha:19,htmlbutton:10,layer:[20,19],almost:[20,10,28,31,32,14],site:[2,21,11],motiv:[2,9,10,20,1],fiddl:34,incom:2,revis:21,cafemochadecaf:19,whatihav:36,bolder:1,insight:[20,21],began:[20,1],classpath:[32,10,1],cross:[2,13,10],member:[21,1,28,2,31,22],python:[1,2,4,6,7,8,9,10,11,12,13,14,15,18,19,20,21,22,27,29,28,30,32,33,34],tendenc:21,fill:[10,21],infer:32,difficult:[20,10,12,2,21,32,19],competit:28,http:[10,11,1,12,8,21,29,7,28,14,35],original_new:27,denot:32,expans:[10,12],drink:19,upon:[31,10,14,21],effect:[27,11,1,12,4,22,21,36,28,19],coffe:[9,19],handi:28,issuccess:11,tribut:22,pdf:[2,7,13,9],canva:35,decoupl:[16,9,11,28],misappl:21,pull:[7,21,10,8,6],off:[20,10,28,2,15,21,32],center:10,albin:21,firstli:19,builder:10,well:[20,10,1,28,2,21,13,5,35,14,19],difflib:6,numerical_integr:11,thought:[20,27,11,29,21,16],scissor:22,weblog:14,exampl:[0,1,2,4,6,7,8,9,10,11,12,13,14,19,20,21,22,27,29,28,31,32,34,35,36,37],command:[9,10,0,1,15,32,11,6,7],setq:7,choos:[9,10,11,1,2,4,21,7,8,19],breaker:20,latest:7,test1:[10,1],test3:[10,1],test2:[10,1],test4:10,less:[20,21,1,13,5,14,19],hybrid:10,trust:1,heavili:[16,21],cafelatt:19,simultan:[7,21],gliffi:13,web:[2,32],rapid:10,newbrain:11,field:[10,12,1,28,13,32],bell:[10,21],makefil:[10,8,1,29],knew:1,proxydemo2:34,add:[1,2,4,6,7,8,10,11,12,13,14,15,17,19,20,21,22,27,28,31,32,34,35],jython_hom:10,wet:19,collis:35,ought:12,confront:27,jython:[9,10,8],royalti:[2,10],elementat:35,fate:21,sumvalu:21,piec:[20,21,27,6],arguabl:[10,21],testa:1,camelcas:13,realiz:[16,20,21,1,32],know:[10,21,1,28,2,8,22,13,7,14],press:[32,10],redesign:21,height:[35,28],recurs:[21,11,4],loss:19,trash:[20,9,21],resid:32,like:[20,32,10,11,1,12,2,31,28,4,22,16,13,34,17,7,29,21,14,19,35],success:[20,10,11,1,21,16],incred:32,paperbin:21,necessari:[21,0,1,12,10,32,34,36,7],lose:[21,10,22,31],resiz:[32,0],boxdesc:28,page:[7,9,11,14,32],poor:21,sum:[32,21],trashbin:21,captur:[10,14],suppli:10,phenomena:28,cafemochaextraespresso:19,growth:19,"export":[7,10],superclass:10,flush:1,proper:[10,21,12],home:[7,10],peter:28,librari:[9,10,11,1,28,30,16,32,5,36],simple2:32,tmp:1,"__setattr__":27,est:20,lead:20,bintyp:21,avoid:[7,20,21],setlayout:28,slide:17,"__getattr__":[27,34],leav:[21,28],itemnotavail:12,speak:[2,34],getnam:[21,1],myfunct:32,hinder:32,weslei:[21,11],slower:[20,10],investig:35,usag:[20,9,21,1],facilit:[21,28],host:[2,7],although:[20,10,21,1,2,4,13,5,7,14],offset:28,beneath:0,simpler:[20,21,1,28,27,34,14],about:[20,9,10,21,1,12,30,2,8,4,22,16,13,35,36,7,14,19,32],quarter:12,actual:[20,32,10,11,1,12,4,22,16,21,34,6,28,14],column:28,purist:21,javaclass:10,mindviewinc:[],bridg:10,constructor:[10,0,1,12,28,4,32,21,27,14],wxcommandev:28,"0076b7ac":27,own:[20,10,28,1,12,2,15,4,22,32,21,33,34,6,7,27,8,19,35],fillov:35,bashrc:10,automat:[9,10,11,1,12,13,15,4,32,21,34,5,6,36,7,28,29],guard:20,getpric:12,awhil:20,rectifi:[21,14],pitfal:32,forget:21,mere:10,merg:[7,9,8],prozac:12,val:[32,21,10,27,28],transfer:[9,5,12],inner:[9,10,1,28,27,21,36,37,14],arg1:[32,14],maze:[9,35],typenum:21,arg2:[32,14],"function":[9,10,11,1,12,32,3,28,4,22,16,21,5,31,7,27,14],mailer:7,north:35,pythontojavaclass:10,subscrib:20,bodi:[32,21,11,14],gain:2,eas:[21,19,12],highest:7,bug:[7,31,21,1],count:[32,1,12],made:[10,12,28,29,13,21],cleanup:1,newval:21,whether:[10,11,12,28,2,21,35],wish:[10,1,19],scroll:10,displai:[32,10,14,1,6],troubl:[7,32,10],record:35,below:[7,10,11,28,19],limit:[32,10,14,27],testfil:6,trepid:14,otherwis:[20,21,11,1,28,2],problem:[20,32,10,11,1,12,3,28,4,22,16,21,34,36,31,27,14,19],jdialog:10,evalu:12,"int":[21,12,1,28,30,10,8,35],dure:[10,1,12,2,21,16,34,14],twist:21,implement:[20,9,10,11,1,12,31,4,32,21,34,35,36,28,14,19],decorator_function_with_argu:14,eric:[34,28],probabl:[20,10,11,28,13,22,32,21,34,5,14],typemapadapt:21,nonetheless:14,entry_exit_funct:14,detail:[20,9,27,11,28,30,31,21,7],virtual:[21,0,12,31,4,32,34,7],preinstal:7,other:[0,1,2,4,7,8,9,10,11,12,13,14,15,16,19,20,21,22,27,28,31,32,34,35,36],lookup:[31,22],futur:[2,10],branch:[7,9,21,8,35],bazzar:13,repeat:[20,11,28,4,7,19],star:27,fulli:32,multipledispatch:22,cafelatteextraespressowhip:19,singleton:[20,9,27,36,12],lightoff:10,mazework:35,stai:[20,21,11],experienc:32,sphinx:[9,29,2,13,7,8],interp1:10,came:[16,20,21],indirectli:21,rule:[20,9,10,1,13,32],cpu:30,portion:1,klass:[27,28]},titles:["Building Application Frameworks","Unit Testing &amp; Test-Driven Development","Introduction","Coroutines &amp; Concurrency","Factory: Encapsulating Object Creation","Messenger/Data Transfer Object","Comprehensions","Developer Guide","ToDo List","Python 3 Patterns, Recipes and Idioms","Jython","Function Objects","StateMachine","Book Development Rules","Decorators","A Canonical Form for Command-Line Programs","Iterators: Decoupling Algorithms from Containers","Teaching Support","A Note To Readers","Decorator: Dynamic Type Selection","The Pattern Concept","Pattern Refactoring","Multiple Dispatching","Part I: Foundations","Part II: Idioms","Part III: Patterns","Generators, Iterators, and Itertools","The Singleton","Observer","Contributors","Discovering the Details About Your Platform","Visitor","Quick Python for Programmers","Python 3 Language Changes","Fronting for an Implementation","Projects","Changing the Interface","Table-Driven Code: Configuration Flexibility"],modules:{},descrefs:{},filenames:["AppFrameworks","UnitTesting","Introduction","CoroutinesAndConcurrency","Factory","Messenger","Comprehensions","DeveloperGuide","ToDo","index","Jython","FunctionObjects","StateMachine","Rules","PythonDecorators","CanonicalScript","Iterators","TeachingSupport","NoteToReaders","Decorator","PatternConcept","PatternRefactoring","MultipleDispatching","Part1","Part2","Part3","GeneratorsIterators","Singleton","Observer","Contributors","MachineDiscovery","Visitor","QuickPython","LanguageChanges","Fronting","Projects","ChangeInterface","TableDriven"]})

File src/Jython.rst

 Jython
 ********************************************************************************
 
-.. note:: This chapter is being brought up to date with Jython 2.5,
-   	  and will need changes when Jython 3 comes out.
+.. note::  This chapter is being brought up to date with Jython 2.5,
+   	   and will need changes when Jython 3 comes out.
+
+.. note::  Some of the descriptions in this chapter are introductory, so
+   	   that the material can be used to introduce Java programmers to
+	   Jython.
 
 This chapter looks at the value of crossing language boundaries. It is often
 advantageous to solve a problem using more than one programming language, rather
 pattern, which adds an interpreted language to your program to allow
 the end user to easily customize a solution. If the application user
 needs greater run time flexibility, for example to create scripts
-describing the desired behavior of the system, you can use the
+describing the desired behavior of the system, you can use
 *Interpreter* by creating and embedding a language interpreter into
 your program.
 
 [#]_, an implementation of Python in pure Java byte codes. As you will
 see, this brings together the benefits of both worlds.
 
-*Interpreter* solves a particular problem - that of creating a
+*Interpreter* solves a particular problem -- that of creating a
 scripting language for the user. But sometimes it's just easier and
 faster to temporarily step into another language to solve a particular
 aspect of your problem. You're not creating an interpreter, you're
-just writing some code in another language.  Again, Jython is a good
-example of this, but CORBA also allows you to cross language
-boundaries.
+just writing some code in another language.
 
 Interpreter Motivation
 =======================================================================
 Python is designed with classes from the ground up and is a truly pure object
 oriented language (both C++ and Java violate purity in various ways). Python
 scales up so that you can create very big programs without losing control of the
-code.
+code. Java projects have been quickly created using Jython, then later optimized by
+rewriting sections of the Jython code that have profiled as bottlenecks into Java.
 
 Installation
 =======================================================================
 .. note:: Select "test the beta".
 
 The download is a **.class** file, which will run an installer when
-you execute it with Java.
+you execute it using ``java -jar``.
 
 You also need the Java Development Kit (JDK), and to add
 **jython-complete.jar** to your Java CLASSPATH.  As an example, here
 for startup.
 
 Note that things that require much more code (and often research) in
-Java are very quick to write in Jython.
+Java are very quick to write in Jython. Here's an example that uses
+a Python *list comprehension* with the **os.walk()** function to visit
+all the directories in a directory tree, and find all the files with names
+that end in **.java** (of course you can easily do more sophisticated things
+like opening the file and looking for information within it)::
+
+     # Jython/Walk_comprehension.py
+     import os
+
+     restFiles = [os.path.join(d[0], f) for d in os.walk(".")
+                  for f in d[2] if f.endswith(".java")]
+
+     for r in restFiles:
+     	 print(r)
+
+You can certainly achieve this in Java. It will just take a lot longer.
 
 Often more sophisticated programs begin as scripts, and then evolve.
 The fact that you can quickly try things out allows you to test
 and the constructor of each will add itself to a (static) master
 list. The common data and behavior will be factored into the base
 class **Event**. Each **Event** object will contain an **action**
-string (for simplicity - in reality, you'd have some sort of
+string (for simplicity -- in reality, you'd have some sort of
 functionality) and a time when the event is supposed to run.  The
 constructor initializes these fields, and then adds the new **Event**
 object to a static list called **events** (defining it in the class,
 
     class Event:
         events = [] # static
+
         def __init__(self, action, time):
             self.action = action
             self.time = time
             Event.events.append(self)
-        # Used by sort(). This will cause
-        # comparisons to be based only on time:
+
         def __cmp__ (self, other):
+	    """
+	    So sort() will compare only on time.
+	    """
             if self.time < other.time: return -1
             if self.time > other.time: return 1
             return 0
+
         def run(self):
             print("%.2f: %s" % (self.time, self.action))
 
 
 The constructor of each derived class calls the base-class constructor, which
 adds the new object to the list. The **run()** function sorts the list, which
-automatically uses the **__cmp__()** method that was defined in **Event** to
+automatically uses the **__cmp__()** method defined in **Event** to
 base comparisons on time only. In this example, it only prints out the list, but
 in the real system it would wait for the time of each event to come up and then
 run the event.
 
 The **__main__** section performs a simple test on the classes.
 
-The above file is now a module that can be included in another Python program to
-define all the classes it contains. But instead of an ordinary Python program,
-let's use Jython, inside of Java. This turns out to be remarkably simple: you
-import some Jython classes, create a **PythonInterpreter** object, and cause the
-Python files to be loaded:
+The above file -- which is an ordinary Python program -- is now a
+module that can be included in another Python program.
+But instead of using it in an ordinary Python program,
+let's use Jython, inside of Java. This turns out to be remarkably
+simple: you import some Jython classes, create a **PythonInterpreter**
+object, and cause the Python files to be loaded:
 
 ..  code-block:: java
 
       }
     }
 
-
 The **PythonInterpreter** object is a complete Python interpreter that accepts
 commands from the Java program. One of these commands is **execfile()**, which
 tells it to execute all the statements it finds in a particular file. By
 **exec()**, which allows you to send a command to the interpreter. In
 the above program, the **run()** function is called using **exec()**.
 
+Using Java libraries
+=======================================================================
+
+Jython wraps the Java libraries so that any of them can be used directly or via
+inheritance. In addition, Python shorthand simplifies coding.
+
+As an example, consider the **HTMLButton.java** example from
+*Thinking in Java*. Here is its conversion to Jython::
+
+    # Jython/PythonSwing.py
+    # The HTMLButton.java example from "Thinking in Java"
+    # converted into Jython.
+    from javax.swing import JFrame, JButton, JLabel
+    from java.awt import FlowLayout
+
+    frame = JFrame("HTMLButton", visible=1,
+      defaultCloseOperation=JFrame.EXIT_ON_CLOSE)
+
+    def kapow(e):
+        frame.contentPane.add(JLabel("<html>"+
+          "<i><font size=+4>Kapow!"))
+        # Force a re-layout to
+        # include the new label:
+        frame.validate()
+
+    button = JButton("<html><b><font size=+2>" +
+      "<center>Hello!<br><i>Press me now!",
+      actionPerformed=kapow)
+    frame.contentPane.layout = FlowLayout()
+    frame.contentPane.add(button)
+    frame.pack()
+    frame.size=200, 500
+
+If you compare the Java version of the program to the above Jython
+implementation, you'll see that Jython is shorter and generally easier to
+understand. For example, to set up the frame in the Java version you had to make
+several calls: the constructor for **JFrame()**, the **setVisible()** method
+and the **setDefaultCloseOperation()** method, whereas in the above code all
+three of these operations are performed with a single constructor call.
+
+Also notice that the **JButton** is configured with an **actionListener()**
+method inside the constructor, with the assignment to **kapow**. In addition,
+Jython's JavaBean awareness means that a call to any method with a name that
+begins with "**set**" can be replaced with an assignment, as you see above.
+
+The only method that did not come over from Java is the **pack()** method,
+which seems to be essential in order to force the layout to happen properly.
+It's also important that the call to **pack()** appear *before* the **size**
+setting.
+
+Inheriting from Java library Classes
+-------------------------------------------------------------------------------
+
+You can easily inherit from standard Java library classes in
+Jython. Here's the **Dialogs.java** example from *Thinking in Java*,
+converted into Jython::
+
+    # Jython/PythonDialogs.py
+    # Dialogs.java from "Thinking in Java" converted into Jython.
+    from java.awt import FlowLayout
+    from javax.swing import JFrame, JDialog, JLabel
+    from javax.swing import JButton
+
+    class MyDialog(JDialog):
+        def __init__(self, parent=None):
+            JDialog.__init__(self, title="My dialog", modal=1)
+            self.contentPane.layout = FlowLayout()
+            self.contentPane.add(JLabel("A dialog!"))
+            self.contentPane.add(JButton("OK",
+              actionPerformed =
+                lambda e, t=self: t.dispose()))
+            self.pack()
+
+    frame = JFrame("Dialogs", visible=1,
+      defaultCloseOperation=JFrame.EXIT_ON_CLOSE)
+    dlg = MyDialog()
+    frame.contentPane.add(
+      JButton("Press here to get a Dialog Box",
+        actionPerformed = lambda e: dlg.show()))
+    frame.pack()
+
+
+**MyDialog** is inherited from **JDialog**, and you can see named arguments
+being used in the call to the base-class constructor.
+
+In the creation of the "OK" **JButton**, note that the **actionPerformed**
+method is set right inside the constructor, and that the function is created
+using the Python **lambda** keyword. This creates a nameless function with the
+arguments appearing before the colon and the expression that generates the
+returned value after the colon. As you should know, the Java prototype for the
+**actionPerformed()** method only contains a single argument, but the lambda
+expression indicates two. However, the second argument is provided with a
+default value, so the function *can* be called with only one argument. The
+reason for the second argument is seen in the default value, because this is a
+way to pass **self** into the lambda expression, so that it can be used to
+dispose of the dialog.
+
+Compare this code with the version that's published in *Thinking in Java*.
+You'll find that Python language features allow a much more succinct and direct
+implementation.
+
+
 Controlling Java from Jython
 =======================================================================
 
-Since you have the Java language at your disposal, and you can set and retrieve
-values in the interpreter, there's a tremendous amount that you can accomplish
-with the above approach (controlling Python from Java).  But one of the amazing
-things about Jython is that it makes Java classes almost transparently available
-from within Jython. Basically, a Java class looks like a Python class. This is
-true for standard Java library classes as well as classes that you create
-yourself, as you can see here::
+There's a tremendous amount that you can accomplish by controlling
+Python from Java.  But one of the amazing things about Jython is that
+it makes Java classes almost transparently available from within
+Jython. Basically, a Java class looks like a Python class. This is
+true for standard Java library classes as well as classes that you
+create yourself, as you can see here::
 
     # Jython/JavaClassInPython.py
+    # Using Java classes within Jython
     # run with: jython.bat JavaClassInPython.py
-    # Using Java classes within Jython
     from java.util import Date, HashSet, HashMap
     from Jython.javaclass import JavaClass
     from math import sin
             return self.val[i], sin(self.val[i])
 
     # Java standard containers:
-    map = HashMap()
-    set = HashSet()
+    jmap = HashMap()
+    jset = HashSet()
 
     for x, y in ValGen(10):
-        map.put(x, y)
-        set.add(y)
-        set.add(y)
+        jmap.put(x, y)
+        jset.add(y)
+        jset.add(y)
 
-    print(map)
-    print(set)
+    print(jmap)
+    print(jset)
 
     # Iterating through a set:
-    for z in set:
+    for z in jset:
         print(z, z.__class__)
 
-    print(map[3]) # Uses Python dictionary indexing
-    for x in map.keySet(): # keySet() is a Map method
-        print(x, map[x])
+    print(jmap[3]) # Uses Python dictionary indexing
+    for x in jmap.keySet(): # keySet() is a Map method
+        print(x, jmap[x])
 
     # Using a Java class that you create yourself is
     # just as easy:
     jc.val = "Using bean properties"
     print(jc.val)
 
+..  todo:: rewrite to distinguish python generator from above description, or
+    	   choose different name.
+
 Note that the **import** statements map to the Java package structure exactly as
 you would expect. In the first example, a **Date()** object is created as if it
 were a native Python class, and printing this object just calls **toString()**.
 in the **for**. These are the kinds of syntax simplifications that make Python
 so endearing.
 
-The **map** and **set** objects are instances of Java's **HashMap** and
+The **jmap** and **jset** objects are instances of Java's **HashMap** and
 **HashSet**, again created as if those classes were just native Python
 components. In the **for** loop, the **put()** and **add()** methods work just
 like they do in Java. Also, indexing into a Java **Map** uses the same notation
 understands JavaBeans properties, since you can either use the **getVal()** and
 **setVal()** methods, or assign to and read from the equivalent **val**
 property. Also, **getChars()** returns a **Character[]** in Java, and this
-becomes an array in Python.
+automatically becomes an array in Python.
 
 The easiest way to use Java classes that you create for use inside a Python
 program is to put them inside a package. Although Jython can also import
 will be treated as if they were defined in different packages so they can only
 see each other's public methods.
 
-Java packages translate into Python modules, and Python must import a module in
+Java packages translate into Jython modules, and Jython must import a module in
 order to be able to use the Java class. Here is the Java code for **JavaClass**:
 
 ..  code-block:: java
 and you can index into it as if it were an array, trying to create a slice
 fails. To completely convert it into an array, one approach is to simply extract
 a Java array using **toArray()**, and pass that in. The **set()** method
-converts it to a **PyArray** - one of the classes provided with Jython - which
+converts it to a **PyArray** -- one of the classes provided with Jython -- which
 can be treated as a Python array (you can also explicitly create a **PyArray**,
 but this seems unnecessary).
 
 compilation: you must inherit from a Java class or interface in your Python
 class (you do not need to specify the **@sig** signature for methods defined in
 the superclass/interface). If you do not do this, you won't get your desired
-methods - unfortunately, **jythonc** gives you no warnings or errors in this
+methods -- unfortunately, **jythonc** gives you no warnings or errors in this
 case, but you won't get what you want. If you don't see what's missing, it can
 be very frustrating.
 
 
 Part of the trick of creating Java classes from Python code is the @sig
 information in the method documentation strings. But there's a second problem
-which stems from the fact that Python has no "package" keyword - the Python
+which stems from the fact that Python has no "package" keyword -- the Python
 equivalent of packages (modules) are implicitly created based on the file name.
 However, to bring the resulting class files into the Java program, **jythonc**
 must be given information about how to create the Java package for the Python
 Python is usually slower, however, but even if you end up re-coding parts of
 your program for speed, the initial fast development will allow you to more
 quickly flesh out the system and uncover and solve the critical sections. And
-often, the execution speed of Python is not a problem - in those cases it's an
+often, the execution speed of Python is not a problem -- in those cases it's an
 even bigger win. A number of commercial products already use Java and Jython,
 and because of the terrific productivity leverage I expect to see this happen
 more in the future.
     signatures, and create a makefile to build the Java **.class** files). Write
     a Java program that uses these classes.
 
+#.  Modify **GreenHouseLanguage.py** so that the subclasses of **Event** are not
+    discrete classes, but are instead *generated* by a single function which creates
+    the class and the associated string dynamically.
+
 .. rubric:: Footnotes
 
 .. [#]  The original version of this was called *JPython*\, but the project