Commits

Bruce Eckel committed cc7c739

Partway through rewrite.

  • Participants
  • Parent commits b1be62c

Comments (0)

Files changed (11)

File code/Jython/JavaClassInPython.py

 # run with: jython.bat JavaClassInPython.py
 # Using Java classes within Jython
 from java.util import Date, HashSet, HashMap
-from jython.javaclass import JavaClass
+from Jython.javaclass import JavaClass
 from math import sin
 
 d = Date() # Creating a Java Date object

File code/Jython/MultipleJythons.java

 // Jython/MultipleJythons.java
 // You can run multiple interpreters, each
 // with its own name space.
-package jython;
 import org.python.util.PythonInterpreter;
 import org.python.core.*;
-import junit.framework.*;
 
-public class MultipleJythons extends TestCase  {
-  PythonInterpreter
-    interp1 =  new PythonInterpreter(),
-    interp2 =  new PythonInterpreter();
-  public void test() throws PyException {
+public class MultipleJythons {
+  public static void
+  main(String[] args) throws PyException  {
+    PythonInterpreter
+      interp1 =  new PythonInterpreter(),
+      interp2 =  new PythonInterpreter();
     interp1.set("a", new PyInteger(42));
     interp2.set("a", new PyInteger(47));
     interp1.exec("print(a)");
     System.out.println("a from interp1: " + x1);
     System.out.println("a from interp2: " + x2);
   }
-  public static void
-  main(String[] args) throws PyException  {
-    junit.textui.TestRunner.run(MultipleJythons.class);
-  }
 }

File code/Jython/PythonDialogs.py

 # Jython/PythonDialogs.py
-# Dialogs.java from "Thinking in Java, 2nd
-# edition," Chapter 13, converted into Jython.
-# Don't run this as part of the automatic make:
-#=M @echo skipping 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()
+  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

 # Jython/PythonSwing.py
-# The HTMLButton.java example from
-# "Thinking in Java, 2nd edition," Chapter 13,
+# The HTMLButton.java example from "Thinking in Java"
 # converted into Jython.
-# Don't run this as part of the automatic make:
-#=M @echo skipping PythonSwing.py
 from javax.swing import JFrame, JButton, JLabel
 from java.awt import FlowLayout
 
   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/PythonToJavaClass.py

 # Jython/PythonToJavaClass.py
-#=T python\java\test\PythonToJavaClass.class
-#=M jythonc.bat --package python.java.test \
-#=M PythonToJavaClass.py
-# A Python class created to produce a Java class
+# A Python class converted into a Java class
+# Compile with:
+# jythonc --package python.java.test PythonToJavaClass.py
 from jarray import array
 import java
 
 class PythonToJavaClass(java.lang.Object):
-    # The '@sig' signature string is used to create
-    # the proper signature in the resulting
-    # Java code:
+    # The '@sig' signature string is used to create the
+    # proper signature in the resulting Java code:
     def __init__(self):
         "@sig public PythonToJavaClass()"
         print("Constructor for PythonToJavaClass")

File code/Jython/TestPythonToJavaClass.java

 // Jython/TestPythonToJavaClass.java
-//+D python\java\test\PythonToJavaClass.class
-package jython;
 import java.lang.reflect.*;
 import java.util.*;
 import org.python.core.*;
-import junit.framework.*;
 import java.util.*;
 import net.mindview.python.*;
 // The package with the Python-generated classes:
 import python.java.test.*;
 
-public class
-TestPythonToJavaClass extends TestCase  {
+public class TestPythonToJavaClass {
   PythonToJavaClass p2j = new PythonToJavaClass();
   public void testDumpClassInfo() {
     System.out.println(
       Arrays.toString(
         p2j.getClass().getConstructors()));
-    Method[] methods =
-      p2j.getClass().getMethods();
+    Method[] methods = p2j.getClass().getMethods();
     for(int i = 0; i < methods.length; i++) {
       String nm = methods[i].toString();
       if(nm.indexOf("PythonToJavaClass") != -1)
         System.out.println(nm);
     }
   }
-  public void test1() {
+  public static void main(String[] args) {
     p2j.simple();
     System.out.println(p2j.returnString());
     System.out.println(
       m.put("" + i, new Float(i));
     p2j.argIn5(PyUtil.toPyDictionary(m));
   }
-  public static void main(String[] args) {
-    junit.textui.TestRunner.run(
-      TestPythonToJavaClass.class);
-  }
 }

File code/Jython/javaclass/JavaClass.java

 // Jython/javaclass/JavaClass.java
-package jython.javaclass;
-import junit.framework.*;
+package Jython.javaclass;
 import java.util.*;
 
 public class JavaClass {
       r[i] = new Character(s.charAt(i));
     return r;
   }
-  public static class Test extends TestCase  {
+  public static void main(String[] args) {
     JavaClass
       x1 = new JavaClass(),
       x2 = new JavaClass("UnitTest");
-    public void test1() {
-      System.out.println(x2.getVal());
-      x1.setVal("SpamEggsSausageAndSpam");
-      System.out.println(
-        Arrays.toString(x1.getChars()));
-    }
-  }
-  public static void main(String[] args) {
-    junit.textui.TestRunner.run(Test.class);
+    System.out.println(x2.getVal());
+    x1.setVal("SpamEggsSausageAndSpam");
+    System.out.println(Arrays.toString(x1.getChars()));
   }
 }

File html/Jython.html

 <h1>Jython<a class="headerlink" href="#jython" title="Permalink to this headline">¶</a></h1>
 <div class="admonition note">
 <p class="first admonition-title">Note</p>
-<p class="last">This chapter is being brough up to date with Jython 2.5, and will need changes when Jython 3 comes out.</p>
+<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>
 <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
 <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="#id5" id="id1">[1]</a>, an implementation of Python in pure Java byte codes. As you will
+<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
 scripting language for the user. But sometimes it&#8217;s just easier and
 </div>
 <div class="section" id="installation">
 <h2>Installation<a class="headerlink" href="#installation" title="Permalink to this headline">¶</a></h2>
-<p>To install Jython, go to <a class="reference external" href="http://jython.sourceforge.net">http://jython.sourceforge.net</a>.  The download is a <strong>.class</strong> file, which
-will run an installer when you execute it with Java.  You also need to add
-<strong>jython.jar</strong> to your Java CLASSPATH.</p>
+<p>To install Jython, go to <a class="reference external" href="http://jython.sourceforge.net">http://jython.sourceforge.net</a>.</p>
+<div class="admonition note">
+<p class="first admonition-title">Note</p>
+<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>
+<p>You also need 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>:</p>
+<div class="highlight-python"><pre>export set JYTHON_HOME="/Users/bruceeckel/jython2.5b0"
+export set CLASSPATH=.:..:$JYTHON_HOME/jython-complete.jar</pre>
+</div>
 <p>When you run Jython, you might get the error: <tt class="docutils literal"><span class="pre">can't</span> <span class="pre">create</span> <span class="pre">package</span>
 <span class="pre">cache</span> <span class="pre">dir,</span> <span class="pre">'/cachedir/packages'</span></tt>. Jython caching requires
-<tt class="docutils literal"><span class="pre">/cachedir/packages/</span></tt> in the <tt class="docutils literal"><span class="pre">python.home</span></tt> directory. It is often the
-case on <a href="#id2"><span class="problematic" id="id3">*</span></a>nix that users lack sufficient priveledges to create or write
-to this directory. Because the problem is merely permissions,
-something similar to &#8220;mkdir cachedir; chmod a+rw cachedir&#8221; within
-Jython&#8217;s directory should eliminate this error message.</p>
+<tt class="docutils literal"><span class="pre">/cachedir/packages/</span></tt> in the <tt class="docutils literal"><span class="pre">python.home</span></tt> directory. It is often
+the case on *nix that users lack sufficient priveledges to create or
+write to this directory. Because the problem is merely permissions,
+something like <tt class="docutils literal"><span class="pre">mkdir</span> <span class="pre">cachedir;</span> <span class="pre">chmod</span> <span class="pre">a+rw</span> <span class="pre">cachedir</span></tt> within the
+Jython directory should eliminate this error message.</p>
 <div class="section" id="getting-the-trunk">
 <h3>Getting the Trunk<a class="headerlink" href="#getting-the-trunk" title="Permalink to this headline">¶</a></h3>
+<div class="admonition note">
+<p class="first admonition-title">Note</p>
+<p class="last">This section has not been successfuly tested yet.</p>
+</div>
 <p>The Jython development trunk is very stable so it&#8217;s safe to get as the most recent
 version of the implementation. The subversion command is:</p>
 <div class="highlight-python"><pre>svn co https://jython.svn.sourceforge.net/svnroot/jython/trunk/jython</pre>
 scripting.  You can rapidly create and test code, and solve problems
 more quickly.</p>
 <p>Here&#8217;s an example that shows a little of what you can do in a Jython
-script, and also gives you a sense of performance (the <tt class="docutils literal"><span class="pre">timeit</span></tt> module
-could not be used as it tries to turn off the Java garbage collector):</p>
+script, and also gives you a sense of performance:</p>
 <div class="highlight-python"><div class="highlight"><pre><span class="c"># Jython/Simple.py</span>
 <span class="k">import</span> <span class="nn">platform</span><span class="o">,</span> <span class="nn">glob</span><span class="o">,</span> <span class="nn">time</span>
 <span class="k">from</span> <span class="nn">subprocess</span> <span class="k">import</span> <span class="n">Popen</span><span class="p">,</span> <span class="n">PIPE</span>
 <span class="k">print</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span> <span class="o">-</span> <span class="n">start</span>
 </pre></div>
 </div>
+<div class="admonition note">
+<p class="first admonition-title">Note</p>
+<p class="last">The <tt class="docutils literal"><span class="pre">timeit</span></tt> module in the alpha distribution could not
+be used as it tries to turn off the Java garbage collector.</p>
+</div>
 <p>If you run this program under both cpython and Jython, you&#8217;ll see that
 the timed loop produces very similar results; Jython 2.5 is in beta so
 this is quite impressive and should get faster &#8211; there&#8217;s even talk
 controller example from <em>Thinking in Java</em>. This is a situation where
 you want the end user &#8211; the person managing the greenhouse &#8211; to have
 configuration control over the system, and so a simple scripting
-language is the ideal solution.  These are often called
-<em>domain-specific languages</em> (DSL) because they solve a particular
+language is the ideal solution.  This is often called a
+<em>domain-specific language</em> (DSL) because it solves a particular
 domain problem.</p>
 <p>To create the language, we&#8217;ll simply write a set of Python classes,
 and the constructor of each will add itself to a (static) master
     <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">Event</span><span class="o">.</span><span class="n">events</span><span class="p">:</span>
         <span class="n">e</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
 
-<span class="c"># To test, this will be run when you say:</span>
-<span class="c"># python GreenHouseLanguage.py</span>
 <span class="k">if</span> <span class="n">__name__</span> <span class="o">==</span> <span class="s">&quot;__main__&quot;</span><span class="p">:</span>
     <span class="n">ThermostatNight</span><span class="p">(</span><span class="mf">5.00</span><span class="p">)</span>
     <span class="n">LightOff</span><span class="p">(</span><span class="mf">2.00</span><span class="p">)</span>
     <span class="n">run</span><span class="p">()</span>
 </pre></div>
 </div>
+<div class="admonition note">
+<p class="first admonition-title">Note</p>
+<p class="last">To run this program say <tt class="docutils literal"><span class="pre">python</span> <span class="pre">GreenHouseLanguage.py</span></tt> or
+<tt class="docutils literal"><span class="pre">jython</span> <span class="pre">GreenHouseLanguage.py</span></tt>.</p>
+</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
 <p>This is the goal of the interpreter design pattern: to make the configuration of
 your program as simple as possible for the end user. With Jython you can achieve
 this with almost no effort at all.</p>
-<p>One of the other methods available to the <strong>PythonInterpreter</strong> is <strong>exec( )</strong>,
-which allows you to send a command to the interpreter. Here, the <strong>run( )</strong>
-function is called using <strong>exec( )</strong>.</p>
+<p>One of the other methods available to the <strong>PythonInterpreter</strong> is
+<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="controlling-the-interpreter">
 <h2>Controlling the Interpreter<a class="headerlink" href="#controlling-the-interpreter" title="Permalink to this headline">¶</a></h2>
 <div class="highlight-java"><div class="highlight"><pre><span class="c">// Jython/MultipleJythons.java</span>
 <span class="c">// You can run multiple interpreters, each</span>
 <span class="c">// with its own name space.</span>
-<span class="k">package</span> <span class="n">jython</span><span class="o">;</span>
 <span class="k">import</span> <span class="nn">org.python.util.PythonInterpreter</span><span class="o">;</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">junit.framework.*</span><span class="o">;</span>
 
-<span class="k">public</span> <span class="k">class</span> <span class="nc">MultipleJythons</span> <span class="k">extends</span> <span class="n">TestCase</span>  <span class="o">{</span>
-  <span class="n">PythonInterpreter</span>
-    <span class="n">interp1</span> <span class="o">=</span>  <span class="k">new</span> <span class="n">PythonInterpreter</span><span class="o">(),</span>
-    <span class="n">interp2</span> <span class="o">=</span>  <span class="k">new</span> <span class="n">PythonInterpreter</span><span class="o">();</span>
-  <span class="k">public</span> <span class="kt">void</span> <span class="nf">test</span><span class="o">()</span> <span class="k">throws</span> <span class="n">PyException</span> <span class="o">{</span>
+<span class="k">public</span> <span class="k">class</span> <span class="nc">MultipleJythons</span> <span class="o">{</span>
+  <span class="k">public</span> <span class="k">static</span> <span class="kt">void</span>
+  <span class="nf">main</span><span class="o">(</span><span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="k">throws</span> <span class="n">PyException</span>  <span class="o">{</span>
+    <span class="n">PythonInterpreter</span>
+      <span class="n">interp1</span> <span class="o">=</span>  <span class="k">new</span> <span class="n">PythonInterpreter</span><span class="o">(),</span>
+      <span class="n">interp2</span> <span class="o">=</span>  <span class="k">new</span> <span class="n">PythonInterpreter</span><span class="o">();</span>
     <span class="n">interp1</span><span class="o">.</span><span class="na">set</span><span class="o">(</span><span class="s">&quot;a&quot;</span><span class="o">,</span> <span class="k">new</span> <span class="n">PyInteger</span><span class="o">(</span><span class="mi">42</span><span class="o">));</span>
     <span class="n">interp2</span><span class="o">.</span><span class="na">set</span><span class="o">(</span><span class="s">&quot;a&quot;</span><span class="o">,</span> <span class="k">new</span> <span class="n">PyInteger</span><span class="o">(</span><span class="mi">47</span><span class="o">));</span>
     <span class="n">interp1</span><span class="o">.</span><span class="na">exec</span><span class="o">(</span><span class="s">&quot;print(a)&quot;</span><span class="o">);</span>
     <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">&quot;a from interp1: &quot;</span> <span class="o">+</span> <span class="n">x1</span><span class="o">);</span>
     <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">&quot;a from interp2: &quot;</span> <span class="o">+</span> <span class="n">x2</span><span class="o">);</span>
   <span class="o">}</span>
-  <span class="k">public</span> <span class="k">static</span> <span class="kt">void</span>
-  <span class="nf">main</span><span class="o">(</span><span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="k">throws</span> <span class="n">PyException</span>  <span class="o">{</span>
-    <span class="n">junit</span><span class="o">.</span><span class="na">textui</span><span class="o">.</span><span class="na">TestRunner</span><span class="o">.</span><span class="na">run</span><span class="o">(</span><span class="n">MultipleJythons</span><span class="o">.</span><span class="na">class</span><span class="o">);</span>
-  <span class="o">}</span>
 <span class="o">}</span>
 </pre></div>
 </div>
 <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">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="n">d</span> <span class="o">=</span> <span class="n">Date</span><span class="p">()</span> <span class="c"># Creating a Java Date object</span>
 <p>Java packages translate into Python modules, and Python 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>
-<span class="k">import</span> <span class="nn">junit.framework.*</span><span class="o">;</span>
+<span class="k">package</span> <span class="n">Jython</span><span class="o">.</span><span class="na">javaclass</span><span class="o">;</span>
 <span class="k">import</span> <span class="nn">java.util.*</span><span class="o">;</span>
 
 <span class="k">public</span> <span class="k">class</span> <span class="nc">JavaClass</span> <span class="o">{</span>
       <span class="n">r</span><span class="o">[</span><span class="n">i</span><span class="o">]</span> <span class="o">=</span> <span class="k">new</span> <span class="n">Character</span><span class="o">(</span><span class="n">s</span><span class="o">.</span><span class="na">charAt</span><span class="o">(</span><span class="n">i</span><span class="o">));</span>
     <span class="k">return</span> <span class="n">r</span><span class="o">;</span>
   <span class="o">}</span>
-  <span class="k">public</span> <span class="k">static</span> <span class="k">class</span> <span class="nc">Test</span> <span class="k">extends</span> <span class="n">TestCase</span>  <span class="o">{</span>
+  <span class="k">public</span> <span class="k">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="o">{</span>
     <span class="n">JavaClass</span>
       <span class="n">x1</span> <span class="o">=</span> <span class="k">new</span> <span class="n">JavaClass</span><span class="o">(),</span>
       <span class="n">x2</span> <span class="o">=</span> <span class="k">new</span> <span class="n">JavaClass</span><span class="o">(</span><span class="s">&quot;UnitTest&quot;</span><span class="o">);</span>
-    <span class="k">public</span> <span class="kt">void</span> <span class="nf">test1</span><span class="o">()</span> <span class="o">{</span>
-      <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="n">x2</span><span class="o">.</span><span class="na">getVal</span><span class="o">());</span>
-      <span class="n">x1</span><span class="o">.</span><span class="na">setVal</span><span class="o">(</span><span class="s">&quot;SpamEggsSausageAndSpam&quot;</span><span class="o">);</span>
-      <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span>
-        <span class="n">Arrays</span><span class="o">.</span><span class="na">toString</span><span class="o">(</span><span class="n">x1</span><span class="o">.</span><span class="na">getChars</span><span class="o">()));</span>
-    <span class="o">}</span>
-  <span class="o">}</span>
-  <span class="k">public</span> <span class="k">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="o">{</span>
-    <span class="n">junit</span><span class="o">.</span><span class="na">textui</span><span class="o">.</span><span class="na">TestRunner</span><span class="o">.</span><span class="na">run</span><span class="o">(</span><span class="n">Test</span><span class="o">.</span><span class="na">class</span><span class="o">);</span>
+    <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="n">x2</span><span class="o">.</span><span class="na">getVal</span><span class="o">());</span>
+    <span class="n">x1</span><span class="o">.</span><span class="na">setVal</span><span class="o">(</span><span class="s">&quot;SpamEggsSausageAndSpam&quot;</span><span class="o">);</span>
+    <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="n">Arrays</span><span class="o">.</span><span class="na">toString</span><span class="o">(</span><span class="n">x1</span><span class="o">.</span><span class="na">getChars</span><span class="o">()));</span>
   <span class="o">}</span>
 <span class="o">}</span>
 </pre></div>
 </div>
 <p>You can see that this is just an ordinary Java class, without any awareness that
 it will be used in a Jython program. For this reason, one of the important uses
-of Jython is in testing Java code <a class="footnote-reference" href="#id6" id="id4">[2]</a>. Because Python is such a powerful,
+of Jython is in testing Java code <a class="footnote-reference" href="#id4" id="id2">[2]</a>. Because Python is such a powerful,
 flexible, dynamic language it is an ideal tool for automated test frameworks,
 without making any changes to the Java code that&#8217;s being tested.</p>
 <div class="section" id="inner-classes">
 source code for that book from <a class="reference external" href="http://www.MindviewInc.com">www.MindviewInc.com</a>, since a number of examples in this book use
 libraries from that book). 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</span>
-<span class="c"># &quot;Thinking in Java, 2nd edition,&quot; Chapter 13,</span>
+<span class="c"># The HTMLButton.java example from &quot;Thinking in Java&quot;</span>
 <span class="c"># converted into Jython.</span>
-<span class="c"># Don&#39;t run this as part of the automatic make:</span>
-<span class="c">#=M @echo skipping PythonSwing.py</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">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">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;&lt;i&gt;&lt;font size=+4&gt;Kapow!&quot;</span><span class="p">))</span>
+    <span class="c"># Force a re-layout to 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>
 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 Chapter 13 of <em>Thinking in Java</em>, converted into
-Jython:</p>
+<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, 2nd</span>
-<span class="c"># edition,&quot; Chapter 13, converted into Jython.</span>
-<span class="c"># Don&#39;t run this as part of the automatic make:</span>
-<span class="c">#=M @echo skipping 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="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">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">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>
 </div>
 <div class="section" id="creating-java-classes-with-jython">
 <h2>Creating Java classes with Jython<a class="headerlink" href="#creating-java-classes-with-jython" title="Permalink to this headline">¶</a></h2>
-<p>Although it does not directly relate to the original problem of this chapter
-(creating an interpreter), Jython has the additional ability to create Java
-classes directly from your Jython code. This can produce very useful results, as
-you are then able to treat the results as if they are native Java classes,
-albeit with Python power under the hood.</p>
+<div class="admonition note">
+<p class="first admonition-title">Note</p>
+<p class="last">Jython 2.5.0 does not support jythonc. Support is planned
+for 2.5.1. jythonc basically converted python source to java
+source, the replacement will generate bytecodes directly,
+and enable jython code to be imported directly into java
+(via generated proxies).</p>
+</div>
+<p>Jython can also create Java classes directly from your Jython
+code. This can produce very useful results, as you are then able to
+treat the results as if they are native Java classes, albeit with
+Python power under the hood.</p>
 <p>To produce Java classes from Python code, Jython comes with a compiler called
 <strong>jythonc</strong>.</p>
-<p>The process of creating Python classes that will produce Java classes is a bit
-more complex than when calling Java classes from Python, because the methods in
-Java classes are strongly typed, while Python functions and methods are weakly
-typed. Thus, you must somehow tell <strong>jythonc</strong> that a Python method is intended
-to have a particular set of argument types and that its return value is a
-particular type. You accomplish this with the &#8220;&#64;sig&#8221; string, which is placed
-right after the beginning of the Python method definition (this is the standard
-location for the Python documentation string). For example:</p>
+<p>The process of creating Python classes that will produce Java classes
+is a bit more complex than when calling Java classes from Python,
+because the methods in Java classes are statically typed, while Python
+functions and methods are dynamically typed. Thus, you must somehow
+tell <strong>jythonc</strong> that a Python method is intended to have a particular
+set of argument types and that its return value is a particular
+type. You accomplish this with the &#8220;&#64;sig&#8221; string, which is placed
+right after the beginning of the Python method definition (this is the
+standard location for the Python documentation string). For example:</p>
 <div class="highlight-python"><div class="highlight"><pre><span class="k">def</span> <span class="nf">returnArray</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
     <span class="s">&quot;@sig public java.lang.String[] returnArray()&quot;</span>
 </pre></div>
 introduces the &#8216;<strong>=T</strong>&#8216; directive for the makefile builder tool, which specifies
 a different target than the one that is normally used by the tool. In this case,
 the Python file is used to build a Java <strong>.class</strong> file, so the class file is
-the desired makefile target. To accomplish this, the default makefile command is
-replaced using the &#8216;<strong>=M</strong>&#8216; directive (notice how you can break across lines
-using &#8216;<strong>\</strong>&#8216;):</p>
+the desired target:</p>
 <div class="highlight-python"><pre># Jython/PythonToJavaClass.py
-#=T python\java\test\PythonToJavaClass.class
-#=M jythonc.bat --package python.java.test \
-#=M PythonToJavaClass.py
-# A Python class created to produce a Java class
+# A Python class converted into a Java class
+# Compile with:
+# jythonc --package python.java.test PythonToJavaClass.py
 from jarray import array
 import java
 
 class PythonToJavaClass(java.lang.Object):
-    # The '@sig' signature string is used to create
-    # the proper signature in the resulting
-    # Java code:
+    # The '@sig' signature string is used to create the
+    # proper signature in the resulting Java code:
     def __init__(self):
         "@sig public PythonToJavaClass()"
         print("Constructor for PythonToJavaClass")
 create and pass a <strong>PyArray</strong> as in <strong>argIn4( )</strong>, where the slice is
 successful. Similarly, a Java <strong>Map</strong> must come in as a <strong>PyDictionary</strong> in
 order to be treated as a Python dictionary.</p>
-<p>Here is the Java program to exercise the Java classes produced by the above
-Python code. This also introduces the &#8216;<strong>=D</strong>&#8216; directive for the makefile
-builder tool, which specifies a dependency in addition to those detected by the
-tool. Here, you can&#8217;t compile <strong>TestPythonToJavaClass.java</strong> until
-<strong>PythonToJavaClass.class</strong> is available:</p>
+<p>Here is the Java program to exercise the Java classes produced by the
+above Python code. You can&#8217;t compile <strong>TestPythonToJavaClass.java</strong>
+until <strong>PythonToJavaClass.class</strong> is available:</p>
 <div class="highlight-java"><div class="highlight"><pre><span class="c">// Jython/TestPythonToJavaClass.java</span>
-<span class="c">//+D python\java\test\PythonToJavaClass.class</span>
-<span class="k">package</span> <span class="n">jython</span><span class="o">;</span>
 <span class="k">import</span> <span class="nn">java.lang.reflect.*</span><span class="o">;</span>
 <span class="k">import</span> <span class="nn">java.util.*</span><span class="o">;</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">junit.framework.*</span><span class="o">;</span>
 <span class="k">import</span> <span class="nn">java.util.*</span><span class="o">;</span>
 <span class="k">import</span> <span class="nn">net.mindview.python.*</span><span class="o">;</span>
 <span class="c">// The package with the Python-generated classes:</span>
 <span class="k">import</span> <span class="nn">python.java.test.*</span><span class="o">;</span>
 
-<span class="k">public</span> <span class="k">class</span>
-<span class="nc">TestPythonToJavaClass</span> <span class="k">extends</span> <span class="n">TestCase</span>  <span class="o">{</span>
+<span class="k">public</span> <span class="k">class</span> <span class="nc">TestPythonToJavaClass</span> <span class="o">{</span>
   <span class="n">PythonToJavaClass</span> <span class="n">p2j</span> <span class="o">=</span> <span class="k">new</span> <span class="n">PythonToJavaClass</span><span class="o">();</span>
   <span class="k">public</span> <span class="kt">void</span> <span class="nf">testDumpClassInfo</span><span class="o">()</span> <span class="o">{</span>
     <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span>
       <span class="n">Arrays</span><span class="o">.</span><span class="na">toString</span><span class="o">(</span>
         <span class="n">p2j</span><span class="o">.</span><span class="na">getClass</span><span class="o">().</span><span class="na">getConstructors</span><span class="o">()));</span>
-    <span class="n">Method</span><span class="o">[]</span> <span class="n">methods</span> <span class="o">=</span>
-      <span class="n">p2j</span><span class="o">.</span><span class="na">getClass</span><span class="o">().</span><span class="na">getMethods</span><span class="o">();</span>
+    <span class="n">Method</span><span class="o">[]</span> <span class="n">methods</span> <span class="o">=</span> <span class="n">p2j</span><span class="o">.</span><span class="na">getClass</span><span class="o">().</span><span class="na">getMethods</span><span class="o">();</span>
     <span class="k">for</span><span class="o">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="o">;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="n">methods</span><span class="o">.</span><span class="na">length</span><span class="o">;</span> <span class="n">i</span><span class="o">++)</span> <span class="o">{</span>
       <span class="n">String</span> <span class="n">nm</span> <span class="o">=</span> <span class="n">methods</span><span class="o">[</span><span class="n">i</span><span class="o">].</span><span class="na">toString</span><span class="o">();</span>
       <span class="k">if</span><span class="o">(</span><span class="n">nm</span><span class="o">.</span><span class="na">indexOf</span><span class="o">(</span><span class="s">&quot;PythonToJavaClass&quot;</span><span class="o">)</span> <span class="o">!=</span> <span class="o">-</span><span class="mi">1</span><span class="o">)</span>
         <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="n">nm</span><span class="o">);</span>
     <span class="o">}</span>
   <span class="o">}</span>
-  <span class="k">public</span> <span class="kt">void</span> <span class="nf">test1</span><span class="o">()</span> <span class="o">{</span>
+  <span class="k">public</span> <span class="k">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="o">{</span>
     <span class="n">p2j</span><span class="o">.</span><span class="na">simple</span><span class="o">();</span>
     <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="n">p2j</span><span class="o">.</span><span class="na">returnString</span><span class="o">());</span>
     <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span>
       <span class="n">m</span><span class="o">.</span><span class="na">put</span><span class="o">(</span><span class="s">&quot;&quot;</span> <span class="o">+</span> <span class="n">i</span><span class="o">,</span> <span class="k">new</span> <span class="n">Float</span><span class="o">(</span><span class="n">i</span><span class="o">));</span>
     <span class="n">p2j</span><span class="o">.</span><span class="na">argIn5</span><span class="o">(</span><span class="n">PyUtil</span><span class="o">.</span><span class="na">toPyDictionary</span><span class="o">(</span><span class="n">m</span><span class="o">));</span>
   <span class="o">}</span>
-  <span class="k">public</span> <span class="k">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="o">{</span>
-    <span class="n">junit</span><span class="o">.</span><span class="na">textui</span><span class="o">.</span><span class="na">TestRunner</span><span class="o">.</span><span class="na">run</span><span class="o">(</span>
-      <span class="n">TestPythonToJavaClass</span><span class="o">.</span><span class="na">class</span><span class="o">);</span>
-  <span class="o">}</span>
 <span class="o">}</span>
 </pre></div>
 </div>
 CLASSPATH in order to run it from the code directory).</p>
 <p>Here are the <strong>make</strong> dependency rules that I used to build the above example
 (the backslashes at the ends of the lines are understood by <strong>make</strong> to be line
-continuations). These rules are encoded into the above Java and Python files
-using the comment syntax that&#8217;s understood by my makefile builder tool:</p>
+continuations):</p>
 <div class="highlight-python"><pre>TestPythonToJavaClass.class: \\
         TestPythonToJavaClass.java \\
         python\java\test\PythonToJavaClass.class
 sophisticated, often requiring more interesting data to be passed back and
 forth. When I encountered the limited documentation, I felt it necessary to come
 up with a more thorough examination of Jython.</p>
-<p>In the process, note that there could be another equally powerful design pattern
-lurking in here, which could perhaps be called <em>multiple languages</em>. This is
-based on the experience of having each language solve a certain class of
-problems better than the other; by combining languages you can solve problems
-much faster than with either language by itself. CORBA is another way to bridge
-across languages, and at the same time bridging between computers and operating
-systems.</p>
+<p>In the process, note that there could be another equally powerful
+design pattern lurking in here, which could perhaps be called
+<em>multiple languages</em> or <em>language hybridizing</em>. This is based on the
+experience of having each language solve a certain class of problems
+better than the other; by combining languages you can solve problems
+much faster than with either language by itself. CORBA is another way
+to bridge across languages, and at the same time bridging between
+computers and operating systems.</p>
 <p>To me, Python and Java present a very potent combination for program development
 because of Java&#8217;s architecture and tool set, and Python&#8217;s extremely rapid
 development (generally considered to be 5-10 times faster than C++ or Java).
 a Java program that uses these classes.</li>
 </ol>
 <p class="rubric">Footnotes</p>
-<table class="docutils footnote" frame="void" id="id5" rules="none">
+<table class="docutils footnote" frame="void" id="id3" rules="none">
 <colgroup><col class="label" /><col /></colgroup>
 <tbody valign="top">
 <tr><td class="label"><a class="fn-backref" href="#id1">[1]</a></td><td>The original version of this was called <em>JPython</em>, but the project
 version.</td></tr>
 </tbody>
 </table>
-<table class="docutils footnote" frame="void" id="id6" rules="none">
+<table class="docutils footnote" frame="void" id="id4" rules="none">
 <colgroup><col class="label" /><col /></colgroup>
 <tbody valign="top">
-<tr><td class="label"><a class="fn-backref" href="#id4">[2]</a></td><td>Changing the registry setting <strong>python.security.respectJavaAccessibility
+<tr><td class="label"><a class="fn-backref" href="#id2">[2]</a></td><td>Changing the registry setting <strong>python.security.respectJavaAccessibility
 = true</strong> to <strong>false</strong> makes testing even more powerful because it allows
 the test script to use <em>all</em> methods, even protected and package-
 private.</td></tr>

File html/_sources/Jython.txt

 Jython
 ********************************************************************************
 
-.. note:: This chapter is being brough 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.
 
 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
 =======================================================================
 
 To install Jython, go to `http://jython.sourceforge.net
-<http://jython.sourceforge.net>`_.  The download is a **.class** file, which
-will run an installer when you execute it with Java.  You also need to add
-**jython.jar** to your Java CLASSPATH.
+<http://jython.sourceforge.net>`_.  
+
+.. note:: Select "test the beta".
+
+The download is a **.class** file, which will run an installer when
+you execute it with Java.
+
+You also need to add **jython-complete.jar** to your Java CLASSPATH.
+As an example, here is the appropriate section in my ``.bashrc``::
+
+   export set JYTHON_HOME="/Users/bruceeckel/jython2.5b0"
+   export set CLASSPATH=.:..:$JYTHON_HOME/jython-complete.jar
 
 When you run Jython, you might get the error: ``can't create package
 cache dir, '/cachedir/packages'``. Jython caching requires
-``/cachedir/packages/`` in the ``python.home`` directory. It is often the
-case on *nix that users lack sufficient priveledges to create or write
-to this directory. Because the problem is merely permissions,
-something similar to "mkdir cachedir; chmod a+rw cachedir" within
-Jython's directory should eliminate this error message.
+``/cachedir/packages/`` in the ``python.home`` directory. It is often
+the case on \*nix that users lack sufficient priveledges to create or
+write to this directory. Because the problem is merely permissions,
+something like ``mkdir cachedir; chmod a+rw cachedir`` within the
+Jython directory should eliminate this error message.
 
 Getting the Trunk
 -----------------------------------------------------------------------
 
+.. note:: This section has not been successfuly tested yet.
+
 The Jython development trunk is very stable so it's safe to get as the most recent
 version of the implementation. The subversion command is::
 
 more quickly.
 
 Here's an example that shows a little of what you can do in a Jython
-script, and also gives you a sense of performance (the ``timeit`` module
-could not be used as it tries to turn off the Java garbage collector)::
+script, and also gives you a sense of performance::
 
 	# Jython/Simple.py
 	import platform, glob, time
 	            oct(i)
         print time.time() - start
 
+..  note:: The ``timeit`` module in the alpha distribution could not
+   	   be used as it tries to turn off the Java garbage collector.
+
 If you run this program under both cpython and Jython, you'll see that
 the timed loop produces very similar results; Jython 2.5 is in beta so
 this is quite impressive and should get faster -- there's even talk
 controller example from *Thinking in Java*. This is a situation where
 you want the end user -- the person managing the greenhouse -- to have
 configuration control over the system, and so a simple scripting
-language is the ideal solution.  These are often called
-*domain-specific languages* (DSL) because they solve a particular
+language is the ideal solution.  This is often called a
+*domain-specific language* (DSL) because it solves a particular
 domain problem.
 
 To create the language, we'll simply write a set of Python classes,
         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)
         Bell(7.00)
         run()
 
+.. note:: To run this program say ``python GreenHouseLanguage.py`` or
+   	  ``jython GreenHouseLanguage.py``.
 
 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
 your program as simple as possible for the end user. With Jython you can achieve
 this with almost no effort at all.
 
-One of the other methods available to the **PythonInterpreter** is **exec( )**,
-which allows you to send a command to the interpreter. Here, the **run( )**
-function is called using **exec( )**.
+One of the other methods available to the **PythonInterpreter** is
+**exec( )**, which allows you to send a command to the interpreter. In
+the above program, the **run( )** function is called using **exec()**.
 
 Controlling the Interpreter
 =======================================================================
     // Jython/MultipleJythons.java
     // You can run multiple interpreters, each
     // with its own name space.
-    package jython;
     import org.python.util.PythonInterpreter;
     import org.python.core.*;
-    import junit.framework.*;
 
-    public class MultipleJythons extends TestCase  {
-      PythonInterpreter
-        interp1 =  new PythonInterpreter(),
-        interp2 =  new PythonInterpreter();
-      public void test() throws PyException {
+    public class MultipleJythons {
+      public static void
+      main(String[] args) throws PyException  {
+        PythonInterpreter
+          interp1 =  new PythonInterpreter(),
+          interp2 =  new PythonInterpreter();
         interp1.set("a", new PyInteger(42));
         interp2.set("a", new PyInteger(47));
         interp1.exec("print(a)");
         System.out.println("a from interp1: " + x1);
         System.out.println("a from interp2: " + x2);
       }
-      public static void
-      main(String[] args) throws PyException  {
-        junit.textui.TestRunner.run(MultipleJythons.class);
-      }
     }
 
 
     # run with: jython.bat JavaClassInPython.py
     # Using Java classes within Jython
     from java.util import Date, HashSet, HashMap
-    from jython.javaclass import JavaClass
+    from Jython.javaclass import JavaClass
     from math import sin
 
     d = Date() # Creating a Java Date object
 ..  code-block:: java
 
     // Jython/javaclass/JavaClass.java
-    package jython.javaclass;
-    import junit.framework.*;
+    package Jython.javaclass;
     import java.util.*;
 
     public class JavaClass {
           r[i] = new Character(s.charAt(i));
         return r;
       }
-      public static class Test extends TestCase  {
+      public static void main(String[] args) {
         JavaClass
           x1 = new JavaClass(),
           x2 = new JavaClass("UnitTest");
-        public void test1() {
-          System.out.println(x2.getVal());
-          x1.setVal("SpamEggsSausageAndSpam");
-          System.out.println(
-            Arrays.toString(x1.getChars()));
-        }
-      }
-      public static void main(String[] args) {
-        junit.textui.TestRunner.run(Test.class);
+        System.out.println(x2.getVal());
+        x1.setVal("SpamEggsSausageAndSpam");
+        System.out.println(Arrays.toString(x1.getChars()));
       }
     }
 
 libraries from that book). Here is its conversion to Jython::
 
     # Jython/PythonSwing.py
-    # The HTMLButton.java example from
-    # "Thinking in Java, 2nd edition," Chapter 13,
+    # The HTMLButton.java example from "Thinking in Java"
     # converted into Jython.
-    # Don't run this as part of the automatic make:
-    #=M @echo skipping PythonSwing.py
     from javax.swing import JFrame, JButton, JLabel
     from java.awt import FlowLayout
 
       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>" +
 Inheriting from Java library Classes
 -------------------------------------------------------------------------------
 
-You can easily inherit from standard Java library classes in Jython. Here's the
-**Dialogs.java** example from Chapter 13 of *Thinking in Java*, converted into
-Jython::
+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, 2nd
-    # edition," Chapter 13, converted into Jython.
-    # Don't run this as part of the automatic make:
-    #=M @echo skipping 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()
+      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()
 
 
 Creating Java classes with Jython
 =======================================================================
 
-Although it does not directly relate to the original problem of this chapter
-(creating an interpreter), Jython has the additional ability to create Java
-classes directly from your Jython code. This can produce very useful results, as
-you are then able to treat the results as if they are native Java classes,
-albeit with Python power under the hood.
+.. note:: Jython 2.5.0 does not support jythonc. Support is planned
+   	  for 2.5.1. jythonc basically converted python source to java
+   	  source, the replacement will generate bytecodes directly,
+   	  and enable jython code to be imported directly into java
+   	  (via generated proxies).
+
+Jython can also create Java classes directly from your Jython
+code. This can produce very useful results, as you are then able to
+treat the results as if they are native Java classes, albeit with
+Python power under the hood.
 
 To produce Java classes from Python code, Jython comes with a compiler called
 **jythonc**.
 
-The process of creating Python classes that will produce Java classes is a bit
-more complex than when calling Java classes from Python, because the methods in
-Java classes are strongly typed, while Python functions and methods are weakly
-typed. Thus, you must somehow tell **jythonc** that a Python method is intended
-to have a particular set of argument types and that its return value is a
-particular type. You accomplish this with the "@sig" string, which is placed
-right after the beginning of the Python method definition (this is the standard
-location for the Python documentation string). For example::
+The process of creating Python classes that will produce Java classes
+is a bit more complex than when calling Java classes from Python,
+because the methods in Java classes are statically typed, while Python
+functions and methods are dynamically typed. Thus, you must somehow
+tell **jythonc** that a Python method is intended to have a particular
+set of argument types and that its return value is a particular
+type. You accomplish this with the "@sig" string, which is placed
+right after the beginning of the Python method definition (this is the
+standard location for the Python documentation string). For example::
 
     def returnArray(self):
         "@sig public java.lang.String[] returnArray()"
 introduces the '**=T**' directive for the makefile builder tool, which specifies
 a different target than the one that is normally used by the tool. In this case,
 the Python file is used to build a Java **.class** file, so the class file is
-the desired makefile target. To accomplish this, the default makefile command is
-replaced using the '**=M**' directive (notice how you can break across lines
-using '**\\**')::
+the desired target::
 
     # Jython/PythonToJavaClass.py
-    #=T python\java\test\PythonToJavaClass.class
-    #=M jythonc.bat --package python.java.test \
-    #=M PythonToJavaClass.py
-    # A Python class created to produce a Java class
+    # A Python class converted into a Java class
+    # Compile with:
+    # jythonc --package python.java.test PythonToJavaClass.py
     from jarray import array
     import java
 
     class PythonToJavaClass(java.lang.Object):
-        # The '@sig' signature string is used to create
-        # the proper signature in the resulting
-        # Java code:
+        # The '@sig' signature string is used to create the
+        # proper signature in the resulting Java code:
         def __init__(self):
             "@sig public PythonToJavaClass()"
             print("Constructor for PythonToJavaClass")
 successful. Similarly, a Java **Map** must come in as a **PyDictionary** in
 order to be treated as a Python dictionary.
 
-Here is the Java program to exercise the Java classes produced by the above
-Python code. This also introduces the '**=D**' directive for the makefile
-builder tool, which specifies a dependency in addition to those detected by the
-tool. Here, you can't compile **TestPythonToJavaClass.java** until
-**PythonToJavaClass.class** is available:
+Here is the Java program to exercise the Java classes produced by the
+above Python code. You can't compile **TestPythonToJavaClass.java**
+until **PythonToJavaClass.class** is available:
 
 ..  code-block:: java
 
     // Jython/TestPythonToJavaClass.java
-    //+D python\java\test\PythonToJavaClass.class
-    package jython;
     import java.lang.reflect.*;
     import java.util.*;
     import org.python.core.*;
-    import junit.framework.*;
     import java.util.*;
     import net.mindview.python.*;
     // The package with the Python-generated classes:
     import python.java.test.*;
 
-    public class
-    TestPythonToJavaClass extends TestCase  {
+    public class TestPythonToJavaClass {
       PythonToJavaClass p2j = new PythonToJavaClass();
       public void testDumpClassInfo() {
         System.out.println(
           Arrays.toString(
             p2j.getClass().getConstructors()));
-        Method[] methods =
-          p2j.getClass().getMethods();
+        Method[] methods = p2j.getClass().getMethods();
         for(int i = 0; i < methods.length; i++) {
           String nm = methods[i].toString();
           if(nm.indexOf("PythonToJavaClass") != -1)
             System.out.println(nm);
         }
       }
-      public void test1() {
+      public static void main(String[] args) {
         p2j.simple();
         System.out.println(p2j.returnString());
         System.out.println(
           m.put("" + i, new Float(i));
         p2j.argIn5(PyUtil.toPyDictionary(m));
       }
-      public static void main(String[] args) {
-        junit.textui.TestRunner.run(
-          TestPythonToJavaClass.class);
-      }
     }
 
 
 
 Here are the **make** dependency rules that I used to build the above example
 (the backslashes at the ends of the lines are understood by **make** to be line
-continuations). These rules are encoded into the above Java and Python files
-using the comment syntax that's understood by my makefile builder tool::
+continuations)::
 
     TestPythonToJavaClass.class: \\
             TestPythonToJavaClass.java \\
 forth. When I encountered the limited documentation, I felt it necessary to come
 up with a more thorough examination of Jython.
 
-In the process, note that there could be another equally powerful design pattern
-lurking in here, which could perhaps be called *multiple languages*. This is
-based on the experience of having each language solve a certain class of
-problems better than the other; by combining languages you can solve problems
-much faster than with either language by itself. CORBA is another way to bridge
-across languages, and at the same time bridging between computers and operating
-systems.
+In the process, note that there could be another equally powerful
+design pattern lurking in here, which could perhaps be called
+*multiple languages* or *language hybridizing*. This is based on the
+experience of having each language solve a certain class of problems
+better than the other; by combining languages you can solve problems
+much faster than with either language by itself. CORBA is another way
+to bridge across languages, and at the same time bridging between
+computers and operating systems.
 
 To me, Python and Java present a very potent combination for program development
 because of Java's architecture and tool set, and Python's extremely rapid

File html/searchindex.js

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

File src/Jython.rst

 Jython
 ********************************************************************************
 
-.. note:: This chapter is being brough 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.
 
 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
 =======================================================================
 
 To install Jython, go to `http://jython.sourceforge.net
-<http://jython.sourceforge.net>`_.  The download is a **.class** file, which
-will run an installer when you execute it with Java.  You also need to add
-**jython.jar** to your Java CLASSPATH.
+<http://jython.sourceforge.net>`_.  
+
+.. note:: Select "test the beta".
+
+The download is a **.class** file, which will run an installer when
+you execute it with Java.
+
+You also need to add **jython-complete.jar** to your Java CLASSPATH.
+As an example, here is the appropriate section in my ``.bashrc``::
+
+   export set JYTHON_HOME="/Users/bruceeckel/jython2.5b0"
+   export set CLASSPATH=.:..:$JYTHON_HOME/jython-complete.jar
 
 When you run Jython, you might get the error: ``can't create package
 cache dir, '/cachedir/packages'``. Jython caching requires
-``/cachedir/packages/`` in the ``python.home`` directory. It is often the
-case on *nix that users lack sufficient priveledges to create or write
-to this directory. Because the problem is merely permissions,
-something similar to "mkdir cachedir; chmod a+rw cachedir" within
-Jython's directory should eliminate this error message.
+``/cachedir/packages/`` in the ``python.home`` directory. It is often
+the case on \*nix that users lack sufficient priveledges to create or
+write to this directory. Because the problem is merely permissions,
+something like ``mkdir cachedir; chmod a+rw cachedir`` within the
+Jython directory should eliminate this error message.
 
 Getting the Trunk
 -----------------------------------------------------------------------
 
+.. note:: This section has not been successfuly tested yet.
+
 The Jython development trunk is very stable so it's safe to get as the most recent
 version of the implementation. The subversion command is::
 
 more quickly.
 
 Here's an example that shows a little of what you can do in a Jython
-script, and also gives you a sense of performance (the ``timeit`` module
-could not be used as it tries to turn off the Java garbage collector)::
+script, and also gives you a sense of performance::
 
 	# Jython/Simple.py
 	import platform, glob, time
 	            oct(i)
         print time.time() - start
 
+..  note:: The ``timeit`` module in the alpha distribution could not
+   	   be used as it tries to turn off the Java garbage collector.
+
 If you run this program under both cpython and Jython, you'll see that
 the timed loop produces very similar results; Jython 2.5 is in beta so
 this is quite impressive and should get faster -- there's even talk
 controller example from *Thinking in Java*. This is a situation where
 you want the end user -- the person managing the greenhouse -- to have
 configuration control over the system, and so a simple scripting
-language is the ideal solution.  These are often called
-*domain-specific languages* (DSL) because they solve a particular
+language is the ideal solution.  This is often called a
+*domain-specific language* (DSL) because it solves a particular
 domain problem.
 
 To create the language, we'll simply write a set of Python classes,
         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)
         Bell(7.00)
         run()
 
+.. note:: To run this program say ``python GreenHouseLanguage.py`` or
+   	  ``jython GreenHouseLanguage.py``.
 
 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
 your program as simple as possible for the end user. With Jython you can achieve
 this with almost no effort at all.
 
-One of the other methods available to the **PythonInterpreter** is **exec( )**,
-which allows you to send a command to the interpreter. Here, the **run( )**
-function is called using **exec( )**.
+One of the other methods available to the **PythonInterpreter** is
+**exec( )**, which allows you to send a command to the interpreter. In
+the above program, the **run( )** function is called using **exec()**.
 
 Controlling the Interpreter
 =======================================================================
     // Jython/MultipleJythons.java
     // You can run multiple interpreters, each
     // with its own name space.
-    package jython;
     import org.python.util.PythonInterpreter;
     import org.python.core.*;
-    import junit.framework.*;
 
-    public class MultipleJythons extends TestCase  {
-      PythonInterpreter
-        interp1 =  new PythonInterpreter(),
-        interp2 =  new PythonInterpreter();
-      public void test() throws PyException {
+    public class MultipleJythons {
+      public static void
+      main(String[] args) throws PyException  {
+        PythonInterpreter
+          interp1 =  new PythonInterpreter(),
+          interp2 =  new PythonInterpreter();
         interp1.set("a", new PyInteger(42));
         interp2.set("a", new PyInteger(47));
         interp1.exec("print(a)");
         System.out.println("a from interp1: " + x1);
         System.out.println("a from interp2: " + x2);
       }
-      public static void
-      main(String[] args) throws PyException  {
-        junit.textui.TestRunner.run(MultipleJythons.class);
-      }
     }
 
 
     # run with: jython.bat JavaClassInPython.py
     # Using Java classes within Jython
     from java.util import Date, HashSet, HashMap
-    from jython.javaclass import JavaClass
+    from Jython.javaclass import JavaClass
     from math import sin
 
     d = Date() # Creating a Java Date object
 ..  code-block:: java
 
     // Jython/javaclass/JavaClass.java
-    package jython.javaclass;
-    import junit.framework.*;
+    package Jython.javaclass;
     import java.util.*;
 
     public class JavaClass {
           r[i] = new Character(s.charAt(i));
         return r;
       }
-      public static class Test extends TestCase  {
+      public static void main(String[] args) {
         JavaClass
           x1 = new JavaClass(),
           x2 = new JavaClass("UnitTest");
-        public void test1() {
-          System.out.println(x2.getVal());
-          x1.setVal("SpamEggsSausageAndSpam");
-          System.out.println(
-            Arrays.toString(x1.getChars()));
-        }
-      }
-      public static void main(String[] args) {
-        junit.textui.TestRunner.run(Test.class);
+        System.out.println(x2.getVal());
+        x1.setVal("SpamEggsSausageAndSpam");
+        System.out.println(Arrays.toString(x1.getChars()));
       }
     }
 
 libraries from that book). Here is its conversion to Jython::
 
     # Jython/PythonSwing.py
-    # The HTMLButton.java example from
-    # "Thinking in Java, 2nd edition," Chapter 13,
+    # The HTMLButton.java example from "Thinking in Java"
     # converted into Jython.
-    # Don't run this as part of the automatic make:
-    #=M @echo skipping PythonSwing.py
     from javax.swing import JFrame, JButton, JLabel
     from java.awt import FlowLayout
 
       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>" +
 Inheriting from Java library Classes
 -------------------------------------------------------------------------------
 
-You can easily inherit from standard Java library classes in Jython. Here's the
-**Dialogs.java** example from Chapter 13 of *Thinking in Java*, converted into
-Jython::
+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, 2nd
-    # edition," Chapter 13, converted into Jython.
-    # Don't run this as part of the automatic make:
-    #=M @echo skipping 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()
+      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()
 
 
 Creating Java classes with Jython
 =======================================================================
 
-Although it does not directly relate to the original problem of this chapter
-(creating an interpreter), Jython has the additional ability to create Java
-classes directly from your Jython code. This can produce very useful results, as
-you are then able to treat the results as if they are native Java classes,
-albeit with Python power under the hood.
+.. note:: Jython 2.5.0 does not support jythonc. Support is planned
+   	  for 2.5.1. jythonc basically converted python source to java
+   	  source, the replacement will generate bytecodes directly,
+   	  and enable jython code to be imported directly into java
+   	  (via generated proxies).
+
+Jython can also create Java classes directly from your Jython
+code. This can produce very useful results, as you are then able to
+treat the results as if they are native Java classes, albeit with
+Python power under the hood.
 
 To produce Java classes from Python code, Jython comes with a compiler called
 **jythonc**.
 
-The process of creating Python classes that will produce Java classes is a bit
-more complex than when calling Java classes from Python, because the methods in
-Java classes are strongly typed, while Python functions and methods are weakly
-typed. Thus, you must somehow tell **jythonc** that a Python method is intended
-to have a particular set of argument types and that its return value is a
-particular type. You accomplish this with the "@sig" string, which is placed
-right after the beginning of the Python method definition (this is the standard
-location for the Python documentation string). For example::
+The process of creating Python classes that will produce Java classes
+is a bit more complex than when calling Java classes from Python,
+because the methods in Java classes are statically typed, while Python
+functions and methods are dynamically typed. Thus, you must somehow
+tell **jythonc** that a Python method is intended to have a particular
+set of argument types and that its return value is a particular
+type. You accomplish this with the "@sig" string, which is placed
+right after the beginning of the Python method definition (this is the
+standard location for the Python documentation string). For example::
 
     def returnArray(self):
         "@sig public java.lang.String[] returnArray()"
 introduces the '**=T**' directive for the makefile builder tool, which specifies
 a different target than the one that is normally used by the tool. In this case,
 the Python file is used to build a Java **.class** file, so the class file is
-the desired makefile target. To accomplish this, the default makefile command is
-replaced using the '**=M**' directive (notice how you can break across lines
-using '**\\**')::
+the desired target::
 
     # Jython/PythonToJavaClass.py
-    #=T python\java\test\PythonToJavaClass.class
-    #=M jythonc.bat --package python.java.test \
-    #=M PythonToJavaClass.py
-    # A Python class created to produce a Java class
+    # A Python class converted into a Java class
+    # Compile with:
+    # jythonc --package python.java.test PythonToJavaClass.py
     from jarray import array
     import java
 
     class PythonToJavaClass(java.lang.Object):
-        # The '@sig' signature string is used to create
-        # the proper signature in the resulting
-        # Java code:
+        # The '@sig' signature string is used to create the
+        # proper signature in the resulting Java code:
         def __init__(self):
             "@sig public PythonToJavaClass()"
             print("Constructor for PythonToJavaClass")
 successful. Similarly, a Java **Map** must come in as a **PyDictionary** in
 order to be treated as a Python dictionary.
 
-Here is the Java program to exercise the Java classes produced by the above
-Python code. This also introduces the '**=D**' directive for the makefile
-builder tool, which specifies a dependency in addition to those detected by the
-tool. Here, you can't compile **TestPythonToJavaClass.java** until
-**PythonToJavaClass.class** is available:
+Here is the Java program to exercise the Java classes produced by the
+above Python code. You can't compile **TestPythonToJavaClass.java**
+until **PythonToJavaClass.class** is available:
 
 ..  code-block:: java
 
     // Jython/TestPythonToJavaClass.java
-    //+D python\java\test\PythonToJavaClass.class
-    package jython;
     import java.lang.reflect.*;
     import java.util.*;
     import org.python.core.*;
-    import junit.framework.*;
     import java.util.*;
     import net.mindview.python.*;
     // The package with the Python-generated classes:
     import python.java.test.*;
 
-    public class
-    TestPythonToJavaClass extends TestCase  {
+    public class TestPythonToJavaClass {
       PythonToJavaClass p2j = new PythonToJavaClass();
       public void testDumpClassInfo() {
         System.out.println(
           Arrays.toString(
             p2j.getClass().getConstructors()));
-        Method[] methods =
-          p2j.getClass().getMethods();
+        Method[] methods = p2j.getClass().getMethods();
         for(int i = 0; i < methods.length; i++) {
           String nm = methods[i].toString();
           if(nm.indexOf("PythonToJavaClass") != -1)
             System.out.println(nm);
         }
       }
-      public void test1() {
+      public static void main(String[] args) {
         p2j.simple();
         System.out.println(p2j.returnString());
         System.out.println(
           m.put("" + i, new Float(i));
         p2j.argIn5(PyUtil.toPyDictionary(m));
       }
-      public static void main(String[] args) {
-        junit.textui.TestRunner.run(
-          TestPythonToJavaClass.class);
-      }
     }
 
 
 
 Here are the **make** dependency rules that I used to build the above example
 (the backslashes at the ends of the lines are understood by **make** to be line
-continuations). These rules are encoded into the above Java and Python files
-using the comment syntax that's understood by my makefile builder tool::
+continuations)::
 
     TestPythonToJavaClass.class: \\
             TestPythonToJavaClass.java \\
 forth. When I encountered the limited documentation, I felt it necessary to come
 up with a more thorough examination of Jython.
 
-In the process, note that there could be another equally powerful design pattern
-lurking in here, which could perhaps be called *multiple languages*. This is
-based on the experience of having each language solve a certain class of
-problems better than the other; by combining languages you can solve problems
-much faster than with either language by itself. CORBA is another way to bridge
-across languages, and at the same time bridging between computers and operating
-systems.
+In the process, note that there could be another equally powerful
+design pattern lurking in here, which could perhaps be called
+*multiple languages* or *language hybridizing*. This is based on the
+experience of having each language solve a certain class of problems
+better than the other; by combining languages you can solve problems
+much faster than with either language by itself. CORBA is another way
+to bridge across languages, and at the same time bridging between
+computers and operating systems.
 
 To me, Python and Java present a very potent combination for program development
 because of Java's architecture and tool set, and Python's extremely rapid