[IPython-dev] Re: Changes to Notebook Format

Robert Kern rkern at ucsd.edu
Mon Jul 18 09:20:50 EDT 2005

Tzanko Matev wrote:
> Hi all,
> I would like to suggest a few changes to the ipython-log part of the
> notebook format. I think that the following structure might be better:
> <ipython-log logid="default-log">
> <element id="1">
> <input type="normal">
> def foo(x, y):
>     return x + y
> </input>
> </element>
> <element id="2">   
> <input type="normal">
> foo(3, 4)
> </input>
> <output type="normal">
> 7
> </output>
> </element>
> </ipython-log>
> The input tags can have types "normal" and "special" which correspond to
> the tags <input> and <special-input> of the current format. The output
> tags can have types "normal", "stdout", "figure", etc.

In trying to convert some code to this scheme, I'm finding that it's 
rather cumbersome. Since the number is attached to the ancestor of 
<input> and <output>, I can't just get all normal inputs or all special 
inputs. Nor can I easily tell when a an particular entry also has a 
special input. For example, when I want to export the plain code, I used 
to use a single XPath expression to get all normal inputs and another 
XPath expression to all special inputs, which I stick in a dictionary 
keyed by the number. Then I go through the normal inputs and replace 
them with the special inputs if they are in the dictionary. With the 
above scheme, I iterate over the <cell> elements (I changed <element> to 
<cell>), check for the presence of a special input with an XPath 
expression, use it if found or if not, then I get the normal input with 
an XPath expression. That's not ideal.

Can you describe the operations that you need to do? How often do you 
have to access this data such that XPath is observably too slow? I think 
it's probable that this rearrangement may *increase* the number of XPath 
expressions you need to evaluate.

Robert Kern
rkern at ucsd.edu

"In the fields of hell where the grass grows high
  Are the graves of dreams allowed to die."
   -- Richard Harter

More information about the IPython-dev mailing list