← Back to team overview

yade-dev team mailing list archive

[SCM] Yet Another Dynamic Engine. Platform for discrete element modeling. branch, master, updated. debian/0.70.0-5-7-g5550290

 

The following commit has been merged in the master branch:
commit f5fe5b42e45763a4274d1b46d2f418f919e78774
Author: Anton Gladky <gladky.anton@xxxxxxxxx>
Date:   Sun Apr 29 21:55:38 2012 +0200

    Remove patches, applied by upstream.

diff --git a/debian/patches/fix_FTBFS_on_KFreeBSD.patch b/debian/patches/fix_FTBFS_on_KFreeBSD.patch
deleted file mode 100644
index 16c7a8c..0000000
--- a/debian/patches/fix_FTBFS_on_KFreeBSD.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-Description: fix FTBFS on KFreeBSD and hopefully on other platforms, where was a problem with compiling qglviewer. Adding additional pathes for finding necessary header-files.
-Author: Anton Gladky <gladky.anton@xxxxxxxxx>
-Bug-Debian: http://bugs.debian.org/628376
-Last-Update: 2011-10-24
---- a/SConstruct
-+++ b/SConstruct
-@@ -100,7 +100,7 @@
- 	('chunkSize','Maximum files to compile in one translation unit when building plugins. (unlimited if <= 0, per-file linkage is used if 1)',7,None,int),
- 	('version','Yade version (if not specified, guess will be attempted)',None),
- 	('realVersion','Revision (usually bzr revision); guessed automatically unless specified',None),
--	('CPPPATH', 'Additional paths for the C preprocessor (colon-separated)','/usr/include/vtk-5.0:/usr/include/vtk-5.2:/usr/include/vtk-5.4:/usr/include/vtk-5.6:/usr/include/vtk'), # hardy has vtk-5.0
-+	('CPPPATH', 'Additional paths for the C preprocessor (colon-separated)','/usr/include/vtk-5.0:/usr/include/vtk-5.2:/usr/include/vtk-5.4:/usr/include/vtk-5.6:/usr/include/vtk:/usr/include/qt4/QtCore/:/usr/include/qt4/:/usr/include/qt4/QtXml:/usr/include/qt4/QtOpenGL:/usr/include/qt4/QtGui'), # hardy has vtk-5.0
- 	('LIBPATH','Additional paths for the linker (colon-separated)',None),
- 	('libstdcxx','Specify libstdc++ location by hand (opened dynamically at startup), usually not needed',None),
- 	('QT4CXX','Specify a different compiler for files including qt4; this is necessary for older qt version (<=4.7) which don\'t compile with clang',None),
diff --git a/debian/patches/fix_boost_1.48_compilation.patch b/debian/patches/fix_boost_1.48_compilation.patch
deleted file mode 100644
index e6f26b5..0000000
--- a/debian/patches/fix_boost_1.48_compilation.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-Description: fix FTBFS on with boost >=1.47.
-Author: Anton Gladky <gladky.anton@xxxxxxxxx>
-Applied-Upstream: http://bazaar.launchpad.net/~yade-dev/yade/trunk/revision/2987
-Last-Update: 2011-12-19
-
---- a/lib/serialization/ObjectIO.hpp
-+++ b/lib/serialization/ObjectIO.hpp
-@@ -9,8 +9,12 @@
- #include<boost/iostreams/filter/gzip.hpp>
- #include<boost/iostreams/device/file.hpp>
- #include<boost/algorithm/string.hpp>
--// local copy
--#include<boost/math/nonfinite_num_facets.hpp>
-+
-+#if BOOST_VERSION>=104700
-+	#include<boost/math/special_functions/nonfinite_num_facets.hpp>
-+#else
-+	#include<boost/math/nonfinite_num_facets.hpp>
-+#endif
- 
- namespace yade{
- /* Utility template functions for (de)serializing objects using boost::serialization from/to streams or files.
---- a/py/wrapper/yadeWrapper.cpp
-+++ b/py/wrapper/yadeWrapper.cpp
-@@ -47,8 +47,11 @@
- // #include<yade/pkg/dem/Shop.hpp>
- #include<yade/pkg/dem/Clump.hpp>
- 
--// local copy
--#include<boost/math/nonfinite_num_facets.hpp>
-+#if BOOST_VERSION>=104700
-+	#include<boost/math/special_functions/nonfinite_num_facets.hpp>
-+#else
-+	#include<boost/math/nonfinite_num_facets.hpp>
-+#endif
- 
- #include<locale>
- #include<boost/archive/codecvt_null.hpp>
diff --git a/debian/patches/fix_ipython_0.12.patch b/debian/patches/fix_ipython_0.12.patch
deleted file mode 100644
index 6aceb28..0000000
--- a/debian/patches/fix_ipython_0.12.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-Description: small fixes due to ipython 0.12
-Author: Anton Gladky <gladky.anton@xxxxxxxxx>
-Applied-Upstream: https://github.com/yade/trunk/commit/307beb3c39da3e29dbd88d0b114adf05233e4e85
-Last-Update: 2012-04-03
-
---- a/core/main/main.py.in
-+++ b/core/main/main.py.in
-@@ -217,15 +217,13 @@
- 		# http://lists.ipython.scipy.org/pipermail/ipython-user/2008-September/005839.html
- 		import IPython.ipapi
- 		IPython.ipapi.get().IP.atexit_operations()
--	elif yade.runtime.ipython_version==11:
-+	elif yade.runtime.ipython_version>=11:
- 		from IPython.frontend.terminal.embed import InteractiveShellEmbed
- 		# use the dict to set attributes
- 		for k in ipconfig: setattr(InteractiveShellEmbed,k,ipconfig[k])
--		InteractiveShellEmbed.banner1=banner # called banner1 here, not banner anymore
-+		InteractiveShellEmbed.banner1=banner+'\n' # called banner1 here, not banner anymore
- 		ipshell=InteractiveShellEmbed()
- 		ipshell()
--		# similar to the workaround, as for 0.10 (perhaps not needed?)
--		ipshell.atexit_operations()
- 
- ## run userSession in a way corresponding to the features we use:
- gui=None
-@@ -262,6 +260,3 @@
- 	import yade.qt # this yade.qt is different from the one that comes with qt3
- 	qapp=QtGui.QApplication(sys.argv)
- 	userSession(qt4=True,qapp=qapp)
--
--#O.exitNoBacktrace()
--
---- a/py/runtime.py
-+++ b/py/runtime.py
-@@ -11,7 +11,7 @@
- except ValueError:
- 	print 'WARN: unable to extract IPython version from %s, defaulting to 10'%(IPython.__version__)
- 	ipython_version=10
--if ipython_version not in (10,11): # versions that we are able to handle, round up or down correspondingly
-+if ipython_version not in (10,11,12): # versions that we are able to handle, round up or down correspondingly
- 	newipver=10 if ipython_version<10 else 11
- 	print 'WARN: unhandled IPython version 0.%d, assuming 0.%d instead.'%(ipython_version,newipver)
- 	ipython_version=newipver
diff --git a/debian/patches/fix_vtk-5.8_compilation.patch b/debian/patches/fix_vtk-5.8_compilation.patch
deleted file mode 100644
index fdee683..0000000
--- a/debian/patches/fix_vtk-5.8_compilation.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-Description: fix FTBFS with vtk-5.8.
-Author: Anton Gladky <gladky.anton@xxxxxxxxx>
-Applied-Upstream: http://bazaar.launchpad.net/~yade-dev/yade/trunk/revision/2967
-                  http://bazaar.launchpad.net/~yade-dev/yade/trunk/revision/2970
-Last-Update: 2011-11-24
-
---- a/SConstruct
-+++ b/SConstruct
-@@ -100,7 +100,7 @@
- 	('chunkSize','Maximum files to compile in one translation unit when building plugins. (unlimited if <= 0, per-file linkage is used if 1)',7,None,int),
- 	('version','Yade version (if not specified, guess will be attempted)',None),
- 	('realVersion','Revision (usually bzr revision); guessed automatically unless specified',None),
--	('CPPPATH', 'Additional paths for the C preprocessor (colon-separated)','/usr/include/vtk-5.0:/usr/include/vtk-5.2:/usr/include/vtk-5.4:/usr/include/vtk-5.6:/usr/include/vtk:/usr/include/qt4/QtCore/:/usr/include/qt4/:/usr/include/qt4/QtXml:/usr/include/qt4/QtOpenGL:/usr/include/qt4/QtGui'), # hardy has vtk-5.0
-+	('CPPPATH', 'Additional paths for the C preprocessor (colon-separated)','/usr/include/vtk-5.0:/usr/include/vtk-5.2:/usr/include/vtk-5.4:/usr/include/vtk-5.6:/usr/include/vtk-5.8:/usr/include/vtk:/usr/include/qt4/QtCore/:/usr/include/qt4/:/usr/include/qt4/QtXml:/usr/include/qt4/QtOpenGL:/usr/include/qt4/QtGui'), # hardy has vtk-5.0
- 	('LIBPATH','Additional paths for the linker (colon-separated)',None),
- 	('libstdcxx','Specify libstdc++ location by hand (opened dynamically at startup), usually not needed',None),
- 	('QT4CXX','Specify a different compiler for files including qt4; this is necessary for older qt version (<=4.7) which don\'t compile with clang',None),
-@@ -355,7 +355,7 @@
- 			else: featureNotOK('qt4','Building with Qt4 implies the QGLViewer library installed (package libqglviewer-qt4-dev package in debian/ubuntu, libQGLViewer in RPM-based distributions)')
- 	if 'vtk' in env['features']:
- 		ok=conf.CheckLibWithHeader(['vtkCommon'],'vtkInstantiator.h','c++','vtkInstantiator::New();',autoadd=1)
--		env.Append(LIBS=['vtkHybrid','vtkFiltering','vtkRendering','vtkIO','vtkexoIIc','vtkParallel','vtkGraphics','vtkverdict','vtkImaging','vtkftgl','vtkDICOMParser','vtkmetaio','vtksqlite'])
-+		env.Append(LIBS=['vtkHybrid','vtkFiltering','vtkRendering','vtkIO','vtkexoIIc','vtkParallel','vtkGraphics','vtkverdict','vtkImaging','vtkftgl','vtkDICOMParser','vtkmetaio'])
- 		if not ok: featureNotOK('vtk',note="Installer can`t find vtk-library. Be sure you have it installed (usually, libvtk5-dev package). Or you might have to add VTK header directory (e.g. /usr/include/vtk-5.4) to CPPPATH.")
- 	if 'gts' in env['features']:
- 		env.ParseConfig('pkg-config gts --cflags --libs');
diff --git a/debian/patches/get_rid_off_suffix.patch b/debian/patches/get_rid_off_suffix.patch
deleted file mode 100644
index 49a5440..0000000
--- a/debian/patches/get_rid_off_suffix.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-Description: Delete the suffix
-Author: Anton Gladky <gladky.anton@xxxxxxxxx>
-Last-Update: 2011-10-24
---- a/SConstruct
-+++ b/SConstruct
-@@ -186,7 +186,7 @@
- if not env.has_key('realVersion') or not env['realVersion']: env['realVersion']=yadeSCons.getRealVersion() or 'unknown' # unknown if nothing returned
- if not env.has_key('version'): env['version']=env['realVersion']
- 
--env['SUFFIX']=('-'+env['version'] if len(env['version'])>0 else '')+env['variant']
-+env['SUFFIX']=''
- env['SUFFIX_DBG']=env['SUFFIX']+('' if not env['debug'] else '/dbg')
- env['LIBDIR']='$PREFIX/lib/yade$SUFFIX_DBG'
- print "Yade version is `%s' (%s), installed files will be suffixed with `%s'."%(env['version'],env['realVersion'],env['SUFFIX'])
diff --git a/debian/patches/ipython-0.11-migration.patch b/debian/patches/ipython-0.11-migration.patch
deleted file mode 100644
index 9b7151e..0000000
--- a/debian/patches/ipython-0.11-migration.patch
+++ /dev/null
@@ -1,865 +0,0 @@
-Description: provide ipython-0.11 compatibility
-Author: Anton Gladky <gladky.anton@xxxxxxxxx>
-Bug: http://bugs.debian.org/636475
-Last-Update: 2011-11-25
-
---- a/core/main/main.py.in
-+++ b/core/main/main.py.in
-@@ -218,7 +218,7 @@
- 		import IPython.ipapi
- 		IPython.ipapi.get().IP.atexit_operations()
- 	elif yade.runtime.ipython_version==11:
--		from IPython.core.embed import InteractiveShellEmbed
-+		from IPython.frontend.terminal.embed import InteractiveShellEmbed
- 		# use the dict to set attributes
- 		for k in ipconfig: setattr(InteractiveShellEmbed,k,ipconfig[k])
- 		InteractiveShellEmbed.banner1=banner # called banner1 here, not banner anymore
-@@ -263,5 +263,5 @@
- 	qapp=QtGui.QApplication(sys.argv)
- 	userSession(qt4=True,qapp=qapp)
- 
--O.exitNoBacktrace()
-+#O.exitNoBacktrace()
- 
---- a/doc/sphinx/conf.py
-+++ b/doc/sphinx/conf.py
-@@ -366,7 +366,7 @@
- 	id.fmtout =' ->  [%d]: '  # for some reason, out and cont must have the trailing space
- 	id.fmtcont='     .\D.: '
- 	id.rc_override=dict(prompt_in1="Yade [\#]:",prompt_in2="     .\D.:",prompt_out=r" ->  [\#]: ")
--	id.reconfig_shell()
-+	#id.reconfig_shell()
- 
- 	import ipython_console_highlighting as ich
- 	ich.IPythonConsoleLexer.input_prompt = re.compile("(Yade \[[0-9]+\]: )")
---- a/doc/sphinx/ipython_console_highlighting.py
-+++ b/doc/sphinx/ipython_console_highlighting.py
-@@ -13,7 +13,7 @@
- 
- # Third party
- from pygments.lexer import Lexer, do_insertions
--from pygments.lexers.agile import (PythonConsoleLexer, PythonLexer, 
-+from pygments.lexers.agile import (PythonConsoleLexer, PythonLexer,
-                                    PythonTracebackLexer)
- from pygments.token import Comment, Generic
- 
-@@ -48,7 +48,7 @@
- 
-       - It assumes the default IPython prompts, not customized ones.
-     """
--    
-+
-     name = 'IPython console session'
-     aliases = ['ipython']
-     mimetypes = ['text/x-ipython-console']
---- a/doc/sphinx/ipython_directive.py
-+++ b/doc/sphinx/ipython_directive.py
-@@ -3,37 +3,38 @@
- 
- This directive allows pasting of entire interactive IPython sessions, prompts
- and all, and their code will actually get re-executed at doc build time, with
--all prompts renumbered sequentially.
-+all prompts renumbered sequentially. It also allows you to input code as a pure
-+python input by giving the argument python to the directive. The output looks
-+like an interactive ipython section.
- 
- To enable this directive, simply list it in your Sphinx ``conf.py`` file
- (making sure the directory where you placed it is visible to sphinx, as is
- needed for all Sphinx directives).
- 
- By default this directive assumes that your prompts are unchanged IPython ones,
--but this can be customized.  For example, the following code in your Sphinx
--config file will configure this directive for the following input/output
--prompts ``Yade [1]:`` and ``-> [1]:``::
--
-- import ipython_directive as id
-- id.rgxin =re.compile(r'(?:In |Yade )\[(\d+)\]:\s?(.*)\s*')
-- id.rgxout=re.compile(r'(?:Out| ->  )\[(\d+)\]:\s?(.*)\s*')
-- id.fmtin ='Yade [%d]:'
-- id.fmtout=' ->  [%d]:'
--
-- id.rc_override=dict(
--   prompt_in1="Yade [\#]:",
--   prompt_in2="     .\D..",
--   prompt_out=" ->  [\#]:"
-- )
-- id.reconfig_shell()
--
-- import ipython_console_highlighting as ich
-- ich.IPythonConsoleLexer.input_prompt=
--    re.compile("(Yade \[[0-9]+\]: )|(   \.\.\.+:)")
-- ich.IPythonConsoleLexer.output_prompt=
--    re.compile("(( ->  )|(Out)\[[0-9]+\]: )|(   \.\.\.+:)")
-- ich.IPythonConsoleLexer.continue_prompt=re.compile("   \.\.\.+:")
-+but this can be customized. The configurable options that can be placed in
-+conf.py are
- 
-+ipython_savefig_dir:
-+    The directory in which to save the figures. This is relative to the
-+    Sphinx source directory. The default is `html_static_path`.
-+ipython_rgxin:
-+    The compiled regular expression to denote the start of IPython input
-+    lines. The default is re.compile('In \[(\d+)\]:\s?(.*)\s*'). You
-+    shouldn't need to change this.
-+ipython_rgxout:
-+    The compiled regular expression to denote the start of IPython output
-+    lines. The default is re.compile('Out\[(\d+)\]:\s?(.*)\s*'). You
-+    shouldn't need to change this.
-+ipython_promptin:
-+    The string to represent the IPython input prompt in the generated ReST.
-+    The default is 'In [%d]:'. This expects that the line numbers are used
-+    in the prompt.
-+ipython_promptout:
-+
-+    The string to represent the IPython prompt in the generated ReST. The
-+    default is 'Out [%d]:'. This expects that the line numbers are used
-+    in the prompt.
- 
- ToDo
- ----
-@@ -41,15 +42,14 @@
- - Turn the ad-hoc test() function into a real test suite.
- - Break up ipython-specific functionality from matplotlib stuff into better
-   separated code.
--- Make sure %bookmarks used internally are removed on exit.
--
- 
- Authors
- -------
- 
- - John D Hunter: orignal author.
--- Fernando Perez: refactoring, documentation, cleanups.
--- VáclavŠmilauer <eudoxos-AT-arcig.cz>: Prompt generatlizations.
-+- Fernando Perez: refactoring, documentation, cleanups, port to 0.11.
-+- VáclavŠmilauer <eudoxos-AT-arcig.cz>: Prompt generalizations.
-+- Skipper Seabold, refactoring, cleanups, pure python addition
- """
- 
- #-----------------------------------------------------------------------------
-@@ -58,12 +58,10 @@
- 
- # Stdlib
- import cStringIO
--import imp
- import os
- import re
--import shutil
- import sys
--import warnings
-+import tempfile
- 
- # To keep compatibility with various python versions
- try:
-@@ -75,36 +73,26 @@
- import matplotlib
- import sphinx
- from docutils.parsers.rst import directives
-+from docutils import nodes
-+from sphinx.util.compat import Directive
- 
- matplotlib.use('Agg')
- 
- # Our own
--import IPython
--from IPython.Shell import MatplotlibShell
-+from IPython import Config, InteractiveShell
-+from IPython.core.profiledir import ProfileDir
-+from IPython.utils import io
- 
- #-----------------------------------------------------------------------------
- # Globals
- #-----------------------------------------------------------------------------
--
--sphinx_version = sphinx.__version__.split(".")
--# The split is necessary for sphinx beta versions where the string is
--# '6b1'
--sphinx_version = tuple([int(re.split('[a-z]', x)[0])
--                        for x in sphinx_version[:2]])
--
-+# for tokenizing blocks
- COMMENT, INPUT, OUTPUT =  range(3)
--rc_override = {}
--rgxin = re.compile('In \[(\d+)\]:\s?(.*)\s*')
--rgxcont = re.compile('   \.+:\s?(.*)\s*')
--rgxout = re.compile('Out\[(\d+)\]:\s?(.*)\s*')
--fmtin = 'In [%d]:'
--fmtout = 'Out[%d]:'
--fmtcont = '   .\D.:'
- 
- #-----------------------------------------------------------------------------
- # Functions and class declarations
- #-----------------------------------------------------------------------------
--def block_parser(part):
-+def block_parser(part, rgxin, rgxout, fmtin, fmtout):
-     """
-     part is a string of ipython text, comprised of at most one
-     input, one ouput, comments, and blank lines.  The block parser
-@@ -156,8 +144,8 @@
-             lineno, inputline = int(matchin.group(1)), matchin.group(2)
- 
-             # the ....: continuation string
--            #continuation = '   %s:'%''.join(['.']*(len(str(lineno))+2))
--            #Nc = len(continuation)
-+            continuation = '   %s:'%''.join(['.']*(len(str(lineno))+2))
-+            Nc = len(continuation)
-             # input lines can continue on for more than one line, if
-             # we have a '\' line continuation char or a function call
-             # echo line 'print'.  The input line can only be
-@@ -173,12 +161,11 @@
- 
-                 nextline = lines[i]
-                 matchout = rgxout.match(nextline)
--                matchcont = rgxcont.match(nextline)
-                 #print "nextline=%s, continuation=%s, starts=%s"%(nextline, continuation, nextline.startswith(continuation))
-                 if matchout or nextline.startswith('#'):
-                     break
--                elif matchcont: #nextline.startswith(continuation):
--                    inputline += '\n' + matchcont.group(1) #nextline[Nc:]
-+                elif nextline.startswith(continuation):
-+                    inputline += '\n' + nextline[Nc:]
-                 else:
-                     rest.append(nextline)
-                 i+= 1
-@@ -199,7 +186,6 @@
- 
-     return block
- 
--
- class EmbeddedSphinxShell(object):
-     """An embedded IPython instance to run inside Sphinx"""
- 
-@@ -207,17 +193,38 @@
- 
-         self.cout = cStringIO.StringIO()
- 
--        IPython.Shell.Term.cout = self.cout
--        IPython.Shell.Term.cerr = self.cout
--        argv = ['-autocall', '0']
--        self.user_ns = {}
--        self.user_glocal_ns = {}
--
--        self.IP = IPython.ipmaker.make_IPython(
--            argv, self.user_ns, self.user_glocal_ns, embedded=True,
--            #shell_class=IPython.Shell.InteractiveShell,
--            shell_class=MatplotlibShell,
--            rc_override = dict(colors = 'NoColor', **rc_override))
-+
-+        # Create config object for IPython
-+        config = Config()
-+        config.Global.display_banner = False
-+        config.Global.exec_lines = ['import numpy as np',
-+                                    'from pylab import *'
-+                                    ]
-+        config.InteractiveShell.autocall = False
-+        config.InteractiveShell.autoindent = False
-+        config.InteractiveShell.colors = 'NoColor'
-+
-+        # create a profile so instance history isn't saved
-+        tmp_profile_dir = tempfile.mkdtemp(prefix='profile_')
-+        profname = 'auto_profile_sphinx_build'
-+        pdir = os.path.join(tmp_profile_dir,profname)
-+        profile = ProfileDir.create_profile_dir(pdir)
-+
-+        # Create and initialize ipython, but don't start its mainloop
-+        IP = InteractiveShell.instance(config=config, profile_dir=profile)
-+        # io.stdout redirect must be done *after* instantiating InteractiveShell
-+        io.stdout = self.cout
-+        io.stderr = self.cout
-+
-+        # For debugging, so we can see normal output, use this:
-+        #from IPython.utils.io import Tee
-+        #io.stdout = Tee(self.cout, channel='stdout') # dbg
-+        #io.stderr = Tee(self.cout, channel='stderr') # dbg
-+
-+        # Store a few parts of IPython we'll need.
-+        self.IP = IP
-+        self.user_ns = self.IP.user_ns
-+        self.user_global_ns = self.IP.user_global_ns
- 
-         self.input = ''
-         self.output = ''
-@@ -230,28 +237,62 @@
-         # pyplot as plt so we can make a call to the plt.gcf().savefig
-         self._pyplot_imported = False
- 
--        # we need bookmark the current dir first so we can save
--        # relative to it
--        self.process_input_line('bookmark ipy_basedir')
-+    def clear_cout(self):
-         self.cout.seek(0)
-         self.cout.truncate(0)
- 
--    def process_input_line(self, line):
-+    def process_input_line(self, line, store_history=True):
-         """process the input, capturing stdout"""
-         #print "input='%s'"%self.input
-         stdout = sys.stdout
--        sys.stdout = self.cout
--        #self.IP.resetbuffer()
--        self.IP.push(self.IP.prefilter(line, 0))
--        #self.IP.runlines(line)
--        sys.stdout = stdout
-+        splitter = self.IP.input_splitter
-+        try:
-+            sys.stdout = self.cout
-+            splitter.push(line)
-+            more = splitter.push_accepts_more()
-+            if not more:
-+                source_raw = splitter.source_raw_reset()[1]
-+                self.IP.run_cell(source_raw, store_history=store_history)
-+        finally:
-+            sys.stdout = stdout
-+
-+    def process_image(self, decorator):
-+        """
-+        # build out an image directive like
-+        # .. image:: somefile.png
-+        #    :width 4in
-+        #
-+        # from an input like
-+        # savefig somefile.png width=4in
-+        """
-+        savefig_dir = self.savefig_dir
-+        source_dir = self.source_dir
-+        saveargs = decorator.split(' ')
-+        filename = saveargs[1]
-+        # insert relative path to image file in source
-+        outfile = os.path.relpath(os.path.join(savefig_dir,filename),
-+                    source_dir)
-+
-+        imagerows = ['.. image:: %s'%outfile]
-+
-+        for kwarg in saveargs[2:]:
-+            arg, val = kwarg.split('=')
-+            arg = arg.strip()
-+            val = val.strip()
-+            imagerows.append('   :%s: %s'%(arg, val))
-+
-+        image_file = os.path.basename(outfile) # only return file name
-+        image_directive = '\n'.join(imagerows)
-+        return image_file, image_directive
-+
- 
-     # Callbacks for each type of token
-     def process_input(self, data, input_prompt, lineno):
-         """Process data block for INPUT token."""
-         decorator, input, rest = data
-         image_file = None
--        #print 'INPUT:', data
-+        image_directive = None
-+        #print 'INPUT:', data  # dbg
-         is_verbatim = decorator=='@verbatim' or self.is_verbatim
-         is_doctest = decorator=='@doctest' or self.is_doctest
-         is_suppress = decorator=='@suppress' or self.is_suppress
-@@ -260,54 +301,37 @@
- 
-         input_lines = input.split('\n')
- 
--        #continuation = '   %s:'%''.join(['.']*(len(str(lineno))+2))
--        #Nc = len(continuation)
-+        continuation = '   %s:'%''.join(['.']*(len(str(lineno))+2))
-+        Nc = len(continuation)
- 
-         if is_savefig:
--            saveargs = decorator.split(' ')
--            filename = saveargs[1]
--            outfile = os.path.join('_static/%s'%filename)
--            # build out an image directive like
--            # .. image:: somefile.png
--            #    :width 4in
--            #
--            # from an input like
--            # savefig somefile.png width=4in
--            imagerows = ['.. image:: %s'%outfile]
--
--            for kwarg in saveargs[2:]:
--                arg, val = kwarg.split('=')
--                arg = arg.strip()
--                val = val.strip()
--                imagerows.append('   :%s: %s'%(arg, val))
--
--            image_file = outfile
--            image_directive = '\n'.join(imagerows)
--
--        # TODO: can we get "rest" from ipython
--        #self.process_input_line('\n'.join(input_lines))
-+            image_file, image_directive = self.process_image(decorator)
- 
-         ret = []
-         is_semicolon = False
-+        store_history = True
- 
-         for i, line in enumerate(input_lines):
-             if line.endswith(';'):
-                 is_semicolon = True
-+            if is_semicolon or is_suppress:
-+                store_history = False
- 
-             if i==0:
-                 # process the first input line
-                 if is_verbatim:
-                     self.process_input_line('')
-+                    self.IP.execution_count += 1 # increment it anyway
-                 else:
-                     # only submit the line in non-verbatim mode
--                    self.process_input_line(line)
-+                    self.process_input_line(line, store_history=store_history)
-                 formatted_line = '%s %s'%(input_prompt, line)
-             else:
-                 # process a continuation line
-                 if not is_verbatim:
--                    self.process_input_line(line)
-+                    self.process_input_line(line, store_history=store_history)
- 
--                formatted_line = fmtcont.replace('\D','.'*len(str(lineno)))+line #'%s %s'%(continuation, line)
-+                formatted_line = '%s %s'%(continuation, line)
- 
-             if not is_suppress:
-                 ret.append(formatted_line)
-@@ -326,7 +350,8 @@
-             ret.append(output)
- 
-         self.cout.truncate(0)
--        return ret, input_lines, output, is_doctest, image_file
-+        return (ret, input_lines, output, is_doctest, image_file,
-+                    image_directive)
-         #print 'OUTPUT', output  # dbg
- 
-     def process_output(self, data, output_prompt,
-@@ -336,46 +361,68 @@
-             submitted = data.strip()
-             found = output
-             if found is not None:
-+                found = found.strip()
-+
-+                # XXX - fperez: in 0.11, 'output' never comes with the prompt
-+                # in it, just the actual output text.  So I think all this code
-+                # can be nuked...
-+
-+                # the above comment does not appear to be accurate... (minrk)
-+
-                 ind = found.find(output_prompt)
-                 if ind<0:
--                    raise RuntimeError('output prompt="%s" does not match out line=%s'%(output_prompt, found))
-+                    e='output prompt="%s" does not match out line=%s' % \
-+                       (output_prompt, found)
-+                    raise RuntimeError(e)
-                 found = found[len(output_prompt):].strip()
- 
-                 if found!=submitted:
--                    raise RuntimeError('doctest failure for input_lines="%s" with found_output="%s" and submitted output="%s"'%(input_lines, found, submitted))
-+                    e = ('doctest failure for input_lines="%s" with '
-+                         'found_output="%s" and submitted output="%s"' %
-+                         (input_lines, found, submitted) )
-+                    raise RuntimeError(e)
-                 #print 'doctest PASSED for input_lines="%s" with found_output="%s" and submitted output="%s"'%(input_lines, found, submitted)
- 
-     def process_comment(self, data):
--        """Process data block for COMMENT token."""
-+        """Process data fPblock for COMMENT token."""
-         if not self.is_suppress:
-             return [data]
- 
-+    def save_image(self, image_file):
-+        """
-+        Saves the image file to disk.
-+        """
-+        self.ensure_pyplot()
-+        command = 'plt.gcf().savefig("%s")'%image_file
-+        #print 'SAVEFIG', command  # dbg
-+        self.process_input_line('bookmark ipy_thisdir', store_history=False)
-+        self.process_input_line('cd -b ipy_savedir', store_history=False)
-+        self.process_input_line(command, store_history=False)
-+        self.process_input_line('cd -b ipy_thisdir', store_history=False)
-+        self.process_input_line('bookmark -d ipy_thisdir', store_history=False)
-+        self.clear_cout()
-+
-+
-     def process_block(self, block):
-         """
-         process block from the block_parser and return a list of processed lines
-         """
--
-         ret = []
-         output = None
-         input_lines = None
-+        lineno = self.IP.execution_count
- 
--        m = rgxin.match(str(self.IP.outputcache.prompt1).strip())
--        lineno = int(m.group(1))
--
--        input_prompt = fmtin%lineno
--        output_prompt = fmtout%lineno
-+        input_prompt = self.promptin%lineno
-+        output_prompt = self.promptout%lineno
-         image_file = None
-         image_directive = None
--        # XXX - This needs a second refactor.  There's too much state being
--        # held globally, which makes for a very awkward interface and large,
--        # hard to test functions.  I've already broken this up at least into
--        # three separate processors to isolate the logic better, but this only
--        # serves to highlight the coupling.  Next we need to clean it up...
-+
-         for token, data in block:
-             if token==COMMENT:
-                 out_data = self.process_comment(data)
-             elif token==INPUT:
--                out_data, input_lines, output, is_doctest, image_file= \
-+                (out_data, input_lines, output, is_doctest, image_file,
-+                    image_directive) = \
-                           self.process_input(data, input_prompt, lineno)
-             elif token==OUTPUT:
-                 out_data = \
-@@ -385,87 +432,235 @@
-             if out_data:
-                 ret.extend(out_data)
- 
-+        # save the image files
-         if image_file is not None:
--            self.ensure_pyplot()
--            command = 'plt.gcf().savefig("%s")'%image_file
--            #print 'SAVEFIG', command  # dbg
--            self.process_input_line('bookmark ipy_thisdir')
--            self.process_input_line('cd -b ipy_basedir')
--            self.process_input_line(command)
--            self.process_input_line('cd -b ipy_thisdir')
--            self.cout.seek(0)
--            self.cout.truncate(0)
-+            self.save_image(image_file)
-+
-         return ret, image_directive
- 
-     def ensure_pyplot(self):
-         if self._pyplot_imported:
-             return
--        self.process_input_line('import matplotlib.pyplot as plt')
-+        self.process_input_line('import matplotlib.pyplot as plt',
-+                                store_history=False)
- 
--# A global instance used below. XXX: not sure why this can't be created inside
--# ipython_directive itself.
--shell = EmbeddedSphinxShell()
--
--def reconfig_shell():
--    """Called after setting module-level variables to re-instantiate
--    with the set values (since shell is instantiated first at import-time
--    when module variables have default values)"""
--    global shell
--    shell = EmbeddedSphinxShell()
-+    def process_pure_python(self, content):
-+        """
-+        content is a list of strings. it is unedited directive conent
- 
-+        This runs it line by line in the InteractiveShell, prepends
-+        prompts as needed capturing stderr and stdout, then returns
-+        the content as a list as if it were ipython code
-+        """
-+        output = []
-+        savefig = False # keep up with this to clear figure
-+        multiline = False # to handle line continuation
-+        fmtin = self.promptin
-+
-+        for lineno, line in enumerate(content):
-+
-+            line_stripped = line.strip()
-+
-+            if not len(line):
-+                output.append(line) # preserve empty lines in output
-+                continue
-+
-+            # handle decorators
-+            if line_stripped.startswith('@'):
-+                output.extend([line])
-+                if 'savefig' in line:
-+                    savefig = True # and need to clear figure
-+                continue
-+
-+            # handle comments
-+            if line_stripped.startswith('#'):
-+                output.extend([line])
-+                continue
-+
-+            # deal with multilines
-+            if not multiline: # not currently on a multiline
-+
-+                if line_stripped.endswith('\\'): # now we are
-+                    multiline = True
-+                    cont_len = len(str(lineno)) + 2
-+                    line_to_process = line.strip('\\')
-+                    output.extend([u"%s %s" % (fmtin%lineno,line)])
-+                    continue
-+                else: # no we're still not
-+                    line_to_process = line.strip('\\')
-+            else: # we are currently on a multiline
-+                line_to_process += line.strip('\\')
-+                if line_stripped.endswith('\\'): # and we still are
-+                    continuation = '.' * cont_len
-+                    output.extend([(u'   %s: '+line_stripped) % continuation])
-+                    continue
-+                # else go ahead and run this multiline then carry on
-+
-+            # get output of line
-+            self.process_input_line(unicode(line_to_process.strip()),
-+                                    store_history=False)
-+            out_line = self.cout.getvalue()
-+            self.clear_cout()
-+
-+            # clear current figure if plotted
-+            if savefig:
-+                self.ensure_pyplot()
-+                self.process_input_line('plt.clf()', store_history=False)
-+                self.clear_cout()
-+                savefig = False
-+
-+            # line numbers don't actually matter, they're replaced later
-+            if not multiline:
-+                in_line = u"%s %s" % (fmtin%lineno,line)
- 
--def ipython_directive(name, arguments, options, content, lineno,
--                      content_offset, block_text, state, state_machine,
--                      ):
--
--    debug = ipython_directive.DEBUG
--    shell.is_suppress = options.has_key('suppress')
--    shell.is_doctest = options.has_key('doctest')
--    shell.is_verbatim = options.has_key('verbatim')
--
--    #print 'ipy', shell.is_suppress, options
--    parts = '\n'.join(content).split('\n\n')
--    lines = ['.. sourcecode:: ipython', '']
--
--    figures = []
--    for part in parts:
--        block = block_parser(part)
--
--        if len(block):
--            rows, figure = shell.process_block(block)
--            for row in rows:
--                lines.extend(['    %s'%line for line in row.split('\n')])
--
--            if figure is not None:
--                figures.append(figure)
--
--    for figure in figures:
--        lines.append('')
--        lines.extend(figure.split('\n'))
--        lines.append('')
--
--    #print lines
--    if len(lines)>2:
--        if debug:
--            print '\n'.join(lines)
--        else:
--            #print 'INSERTING %d lines'%len(lines)
--            state_machine.insert_input(
--                lines, state_machine.input_lines.source(0))
-+                output.extend([in_line])
-+            else:
-+                output.extend([(u'   %s: '+line_stripped) % continuation])
-+                multiline = False
-+            if len(out_line):
-+                output.extend([out_line])
-+            output.extend([u''])
-+
-+        return output
-+
-+class IpythonDirective(Directive):
-+
-+    has_content = True
-+    required_arguments = 0
-+    optional_arguments = 4 # python, suppress, verbatim, doctest
-+    final_argumuent_whitespace = True
-+    option_spec = { 'python': directives.unchanged,
-+                    'suppress' : directives.flag,
-+                    'verbatim' : directives.flag,
-+                    'doctest' : directives.flag,
-+                  }
-+
-+    shell = EmbeddedSphinxShell()
-+
-+    def get_config_options(self):
-+        # contains sphinx configuration variables
-+        config = self.state.document.settings.env.config
-+
-+        # get config variables to set figure output directory
-+        confdir = self.state.document.settings.env.app.confdir
-+        savefig_dir = config.ipython_savefig_dir
-+        source_dir = os.path.dirname(self.state.document.current_source)
-+        if savefig_dir is None:
-+            savefig_dir = config.html_static_path
-+        if isinstance(savefig_dir, list):
-+            savefig_dir = savefig_dir[0] # safe to assume only one path?
-+        savefig_dir = os.path.join(confdir, savefig_dir)
-+
-+        # get regex and prompt stuff
-+        rgxin     = config.ipython_rgxin
-+        rgxout    = config.ipython_rgxout
-+        promptin  = config.ipython_promptin
-+        promptout = config.ipython_promptout
-+
-+        return savefig_dir, source_dir, rgxin, rgxout, promptin, promptout
-+
-+    def setup(self):
-+        # get config values
-+        (savefig_dir, source_dir, rgxin,
-+                rgxout, promptin, promptout) = self.get_config_options()
-+
-+        # and attach to shell so we don't have to pass them around
-+        self.shell.rgxin = rgxin
-+        self.shell.rgxout = rgxout
-+        self.shell.promptin = promptin
-+        self.shell.promptout = promptout
-+        self.shell.savefig_dir = savefig_dir
-+        self.shell.source_dir = source_dir
-+
-+        # setup bookmark for saving figures directory
-+
-+        self.shell.process_input_line('bookmark ipy_savedir %s'%savefig_dir,
-+                                      store_history=False)
-+        self.shell.clear_cout()
-+
-+        return rgxin, rgxout, promptin, promptout
-+
-+
-+    def teardown(self):
-+        # delete last bookmark
-+        self.shell.process_input_line('bookmark -d ipy_savedir',
-+                                      store_history=False)
-+        self.shell.clear_cout()
-+
-+    def run(self):
-+        debug = False
-+
-+        #TODO, any reason block_parser can't be a method of embeddable shell
-+        # then we wouldn't have to carry these around
-+        rgxin, rgxout, promptin, promptout = self.setup()
-+
-+        options = self.options
-+        self.shell.is_suppress = 'suppress' in options
-+        self.shell.is_doctest = 'doctest' in options
-+        self.shell.is_verbatim = 'verbatim' in options
-+
-+
-+        # handle pure python code
-+        if 'python' in self.arguments:
-+            content = self.content
-+            self.content = self.shell.process_pure_python(content)
-+
-+        parts = '\n'.join(self.content).split('\n\n')
-+
-+        lines = ['.. code-block:: ipython','']
-+        figures = []
-+
-+        for part in parts:
-+
-+            block = block_parser(part, rgxin, rgxout, promptin, promptout)
-+
-+            if len(block):
-+                rows, figure = self.shell.process_block(block)
-+                for row in rows:
-+                    lines.extend(['   %s'%line for line in row.split('\n')])
-+
-+                if figure is not None:
-+                    figures.append(figure)
-+
-+        #text = '\n'.join(lines)
-+        #figs = '\n'.join(figures)
-+
-+        for figure in figures:
-+            lines.append('')
-+            lines.extend(figure.split('\n'))
-+            lines.append('')
-+
-+        #print lines
-+        if len(lines)>2:
-+            if debug:
-+                print '\n'.join(lines)
-+            else: #NOTE: this raises some errors, what's it for?
-+                #print 'INSERTING %d lines'%len(lines)
-+                self.state_machine.insert_input(
-+                    lines, self.state_machine.input_lines.source(0))
-+
-+        text = '\n'.join(lines)
-+        txtnode = nodes.literal_block(text, text)
-+        txtnode['language'] = 'ipython'
-+        #imgnode = nodes.image(figs)
- 
--    return []
-+        # cleanup
-+        self.teardown()
- 
--ipython_directive.DEBUG = False
-+        return []#, imgnode]
- 
- # Enable as a proper Sphinx directive
- def setup(app):
-     setup.app = app
--    options = {'suppress': directives.flag,
--               'doctest': directives.flag,
--               'verbatim': directives.flag,
--               }
- 
--    app.add_directive('ipython', ipython_directive, True, (0, 2, 0), **options)
-+    app.add_directive('ipython', IpythonDirective)
-+    app.add_config_value('ipython_savefig_dir', None, True)
-+    app.add_config_value('ipython_rgxin',
-+                         re.compile('In \[(\d+)\]:\s?(.*)\s*'), True)
-+    app.add_config_value('ipython_rgxout',
-+                         re.compile('Out\[(\d+)\]:\s?(.*)\s*'), True)
-+    app.add_config_value('ipython_promptin', 'In [%d]:', True)
-+    app.add_config_value('ipython_promptout', 'Out[%d]:', True)
- 
- 
- # Simple smoke test, needs to be converted to a proper automatic test.
-@@ -488,7 +683,7 @@
- @savefig mystinkbug.png width=4in
- In [4]: imshow(im)
- Out[4]: <matplotlib.image.AxesImage object at 0x39ea850>
--        
-+
- """,
-         r"""
- 
-@@ -523,7 +718,7 @@
- In [134]: numpy.random.seed(2358)
- 
- @doctest
--In [135]: np.random.rand(10,2)
-+In [135]: numpy.random.rand(10,2)
- Out[135]:
- array([[ 0.64524308,  0.59943846],
-        [ 0.47102322,  0.8715456 ],
-@@ -556,8 +751,6 @@
- 7
- 8
- 9
--
--
- """,
- 
-         r"""
-@@ -597,11 +790,12 @@
- In [153]: grid(True)
- 
-         """,
--    ]
--
-+        ]
-+    # skip local-file depending first example:
-+    examples = examples[1:]
- 
--    ipython_directive.DEBUG = True
--    #options = dict(suppress=True)
-+    #ipython_directive.DEBUG = True  # dbg
-+    #options = dict(suppress=True)  # dbg
-     options = dict()
-     for example in examples:
-         content = example.split('\n')
-@@ -613,4 +807,7 @@
- 
- # Run test suite as a script
- if __name__=='__main__':
-+    if not os.path.isdir('_static'):
-+        os.mkdir('_static')
-     test()
-+    print 'All OK? Check figures in _static/'
diff --git a/debian/patches/series b/debian/patches/series
index 0e9758f..fead62e 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,7 +1 @@
-fix_FTBFS_on_KFreeBSD.patch
 get_rid_off_suffix.patch
-fix_vtk-5.8_compilation.patch
-ipython-0.11-migration.patch
-disable_tex_creation.patch
-fix_boost_1.48_compilation.patch
-fix_ipython_0.12.patch

-- 
Yet Another Dynamic Engine. Platform for discrete element modeling.