On Mon, Jun 22, 2009 at 11:21 PM, Ondrej Certik <span dir="ltr">&lt;<a href="mailto:ondrej@certik.cz">ondrej@certik.cz</a>&gt;</span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Hi,<br>
<br>
with the attached patch you can now do:<br>
<br>
----<br>
a = {3: 4}<br>
<br>
def something():<br>
    b = 45<br>
    import IPython<br>
    IPython.set_trace()<br>
<br>
something()<br>
----<br>
<br>
and after you run it:<br>
<br>
-----------<br>
Python 2.6.2 (release26-maint, Apr 19 2009, 01:58:18)<br>
Type &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information.<br>
<br>
IPython 0.10.bzr.r1163 -- An enhanced Interactive Python.<br>
?         -&gt; Introduction and overview of IPython&#39;s features.<br>
%quickref -&gt; Quick reference.<br>
help      -&gt; Python&#39;s own help system.<br>
object?   -&gt; Details about &#39;object&#39;. ?object also works, ?? prints more.<br>
<br>
In [1]: a<br>
Out[1]: {3: 4}<br>
<br>
In [2]: b<br>
Out[2]: 45<br>
-------<br>
<br>
<br>
e.g. you can access locals() and globals() immediately. I use this<br>
very often lately, as it is very handy to debug some broken place in<br>
the code. Another usage is that I need to implement some difficult<br>
operation with numpy arrays, dicts, etc. usually some oneliner, but I<br>
am not sure about the API, so I just call IPython.set_trace(), play<br>
with the things to get what I want, then just copy &amp; paste the<br>
oneliner to the code.<br>
<br>
More info in the docstring:<br>
<br>
In [2]: IPython.set_trace?<br>
Type:           function<br>
Base Class:     &lt;type &#39;function&#39;&gt;<br>
String Form:    &lt;function set_trace at 0x7f31ca8b3140&gt;<br>
Namespace:      Interactive<br>
File:           /home/ondrej/usr/lib/python/IPython/__init__.py<br>
Definition:     IPython.set_trace()<br>
Docstring:<br>
    Starts the IPython shell inplace.<br>
<br>
    Example:<br>
<br>
    &gt;&gt; import IPython<br>
    &gt;&gt; IPython.set_trace()<br>
<br>
    The user namespace is set to the union of globals() and locals(), e.g.<br>
    calling set_trace() is exactly equivalent to:<br>
<br>
        import IPython<br>
        IPython.Shell.IPShell(user_ns=dict(globals(), **locals())).mainloop()<br>
<br>
    but the actual implementation of set_trace() needs to use the inspect<br>
    module, because it needs to access the parents frame.<br>
<br>
<br>
<br>
Let me know if the implementation is ok, or if some more work is needed.<br>
<br>
Thanks,<br>
<font color="#888888">Ondrej<br>
</font><br>_______________________________________________<br>
IPython-dev mailing list<br>
<a href="mailto:IPython-dev@scipy.org">IPython-dev@scipy.org</a><br>
<a href="http://mail.scipy.org/mailman/listinfo/ipython-dev" target="_blank">http://mail.scipy.org/mailman/listinfo/ipython-dev</a><br>
<br></blockquote></div><br>Ondrej,<br><br>I am testing the patch. See my comments below:<br><br>[gsever@ccn ~]$ python<br>Python 2.5.2 (r252:60911, Sep 30 2008, 15:41:38) <br>[GCC 4.3.2 20080917 (Red Hat 4.3.2-4)] on linux2<br>
Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information.<br>&gt;&gt;&gt; b=25<br>&gt;&gt;&gt; import numpy as np<br>&gt;&gt;&gt; arr = np.arange(10)<br>&gt;&gt;&gt; import IPython<br>
&gt;&gt;&gt; IPython.set_trace()<br> Logging to /home/gsever/.ipython/2009-06-23.py<br><br>Python 2.5.2 (r252:60911, Sep 30 2008, 15:41:38) <br>Type &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information.<br>
<br>IPython 0.10.bzr.r1174 -- An enhanced Interactive Python.<br>?         -&gt; Introduction and overview of IPython&#39;s features.<br>%quickref -&gt; Quick reference.<br>help      -&gt; Python&#39;s own help system.<br>
object?   -&gt; Details about &#39;object&#39;. ?object also works, ?? prints more.<br><br>In [1]: whos   ###&lt;--- Nothing is listed :(<br>Interactive namespace is empty.<br><br>In [2]: b<br>Out[2]: 25<br><br>In [4]: arr<br>
Out[4]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])<br><br>In [5]: exit()    ###&lt;--- it exits but act as if it in the IPython session :(<br>Do you really want to exit ([y]/n)? y<br>&gt;&gt;&gt; data[0]<br><br>### and can&#39;t completely exit, stays in a never-ending loop :(<br>
<br>Other than these complaints, a very nice addition indeed :)<br><br>Could you please tell whether IPython instantiation could be expanded to a pylab enabled session? (A previously asked question, but just wondering...)<br>
<br>Gökhan<br><br><br><br>