diff --git a/IPython/completer.py b/IPython/completer.py index 52df78e..b8b5334 100644 --- a/IPython/completer.py +++ b/IPython/completer.py @@ -6,7 +6,6 @@ upstream and were accepted as of Python 2.3, but we need a lot more functionality specific to IPython, so this module will continue to live as an IPython-specific utility. ---------------------------------------------------------------------------- Original rlcompleter documentation: This requires the latest extension to the readline module (the diff --git a/IPython/genutils.py b/IPython/genutils.py index 38f93ef..0606842 100644 --- a/IPython/genutils.py +++ b/IPython/genutils.py @@ -1234,11 +1234,11 @@ def esc_quotes(strng): def make_quoted_expr(s): """Return string s in appropriate quotes, using raw string if possible. - Effectively this turns string: cd \ao\ao\ - to: r"cd \ao\ao\_"[:-1] - - Note the use of raw string and padding at the end to allow trailing backslash. + XXX - example removed because it caused encoding errors in documentation + generation. We need a new example that doesn't contain invalid chars. + Note the use of raw string and padding at the end to allow trailing + backslash. """ tail = '' diff --git a/IPython/ipapi.py b/IPython/ipapi.py index 81580cd..860565b 100644 --- a/IPython/ipapi.py +++ b/IPython/ipapi.py @@ -24,7 +24,6 @@ That way the module is imported at startup and you can have all your personal configuration (as opposed to boilerplate ipythonrc-PROFILENAME stuff) in there. ------------------------------------------------ import IPython.ipapi ip = IPython.ipapi.get() diff --git a/IPython/kernel/core/util.py b/IPython/kernel/core/util.py index 7465aff..1dceb4a 100644 --- a/IPython/kernel/core/util.py +++ b/IPython/kernel/core/util.py @@ -70,8 +70,8 @@ def esc_quotes(strng): def make_quoted_expr(s): """Return string s in appropriate quotes, using raw string if possible. - Effectively this turns string: cd \ao\ao\ - to: r"cd \ao\ao\_"[:-1] + XXX - example removed because it caused encoding errors in documentation + generation. We need a new example that doesn't contain invalid chars. Note the use of raw string and padding at the end to allow trailing backslash. diff --git a/IPython/testing/decorators.py b/IPython/testing/decorators.py index f706235..99e5066 100644 --- a/IPython/testing/decorators.py +++ b/IPython/testing/decorators.py @@ -121,7 +121,7 @@ def skipif(skip_condition, msg=None): ''' Make function raise SkipTest exception if skip_condition is true Parameters - --------- + ---------- skip_condition : bool or callable. Flag to determine whether to skip test. If the condition is a callable, it is used at runtime to dynamically make the decision. This diff --git a/IPython/testing/decorators_numpy.py b/IPython/testing/decorators_numpy.py index 42727f2..e6a56cb 100644 --- a/IPython/testing/decorators_numpy.py +++ b/IPython/testing/decorators_numpy.py @@ -50,7 +50,7 @@ def skipif(skip_condition=True, msg=None): ''' Make function raise SkipTest exception if skip_condition is true Parameters - --------- + ---------- skip_condition : bool or callable. Flag to determine whether to skip test. If the condition is a callable, it is used at runtime to dynamically make the decision. This diff --git a/docs/Makefile b/docs/Makefile index 506264b..d7e9363 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -5,13 +5,14 @@ SPHINXOPTS = SPHINXBUILD = sphinx-build PAPER = +SRCDIR = source # Internal variables. PAPEROPT_a4 = -D latex_paper_size=a4 PAPEROPT_letter = -D latex_paper_size=letter -ALLSPHINXOPTS = -d build/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source +ALLSPHINXOPTS = -d build/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) $(SRCDIR) -.PHONY: help clean html web pickle htmlhelp latex changes linkcheck +.PHONY: help clean html web pickle htmlhelp latex changes linkcheck api help: @echo "Please use \`make ' where is one of" @@ -28,7 +29,7 @@ help: @echo "dist all, and then puts the results in dist/" clean: - -rm -rf build/* dist/* + -rm -rf build/* dist/* $(SRCDIR)/api/generated pdf: latex cd build/latex && make all-pdf @@ -41,12 +42,16 @@ dist: clean all cp -al build/html dist/ @echo "Build finished. Final docs are in dist/" -html: +html: api mkdir -p build/html build/doctrees $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) build/html @echo @echo "Build finished. The HTML pages are in build/html." +api: + python autogen_api.py + @echo "Build API docs finished." + pickle: mkdir -p build/pickle build/doctrees $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) build/pickle diff --git a/docs/autogen_api.py b/docs/autogen_api.py new file mode 100755 index 0000000..c7ab055 --- /dev/null +++ b/docs/autogen_api.py @@ -0,0 +1,33 @@ +#!/usr/bin/env python +"""Script to auto-generate our API docs. +""" +# stdlib imports +import os +import sys + +# local imports +sys.path.append(os.path.abspath('sphinxext')) +from apigen import ApiDocWriter + +#***************************************************************************** +if __name__ == '__main__': + pjoin = os.path.join + package = 'IPython' + outdir = pjoin('source','api','generated') + docwriter = ApiDocWriter(package,rst_extension='.txt') + docwriter.package_skip_patterns += [r'\.fixes$', + r'\.externals$', + r'\.Extensions', + r'\.kernel.config', + r'\.attic', + ] + docwriter.module_skip_patterns += [ r'\.FakeModule', + r'\.cocoa', + r'\.ipdoctest', + r'\.Gnuplot', + ] + docwriter.write_api_docs(outdir) + docwriter.write_index(outdir, 'gen', + relative_to = pjoin('source','api') + ) + print '%d files written' % len(docwriter.written_modules) diff --git a/docs/source/api/index.txt b/docs/source/api/index.txt new file mode 100644 index 0000000..d5c55f4 --- /dev/null +++ b/docs/source/api/index.txt @@ -0,0 +1,12 @@ +.. _api-index: + +################### + The IPython API +################### + +.. htmlonly:: + + :Release: |version| + :Date: |today| + +.. include:: generated/gen.txt diff --git a/docs/source/conf.py b/docs/source/conf.py index 06e1430..198b195 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -36,9 +36,13 @@ execfile('../../IPython/Release.py',iprelease) # Add any Sphinx extension module names here, as strings. They can be extensions # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. extensions = ['sphinx.ext.autodoc', - 'inheritance_diagram', 'only_directives', + 'sphinx.ext.doctest', + + 'only_directives', + 'inheritance_diagram', 'ipython_console_highlighting', # 'plot_directive', # disabled for now, needs matplotlib + 'numpydoc', # to preprocess docstrings ] # Add any paths that contain templates here, relative to this directory. diff --git a/docs/source/index.txt b/docs/source/index.txt index bde7c08..5e969a5 100644 --- a/docs/source/index.txt +++ b/docs/source/index.txt @@ -17,10 +17,11 @@ IPython Documentation interactive/index.txt parallel/index.txt config/index.txt - changes.txt - development/index.txt faq.txt history.txt + changes.txt + development/index.txt + api/index.txt license_and_copyright.txt credits.txt diff --git a/docs/source/interactive/reference.txt b/docs/source/interactive/reference.txt index b3a873b..8e045d5 100644 --- a/docs/source/interactive/reference.txt +++ b/docs/source/interactive/reference.txt @@ -496,9 +496,9 @@ following example defines a new magic command, %impall:: ip.expose_magic('impall', doimp) You can also define your own aliased names for magic functions. In your -ipythonrc file, placing a line like: +ipythonrc file, placing a line like:: -execute __IP.magic_cl = __IP.magic_clear + execute __IP.magic_cl = __IP.magic_clear will define %cl as a new name for %clear. @@ -508,1572 +508,9 @@ magic functions at any time and their docstrings. You can also type information on the '?' system) to get information about any particular magic function you are interested in. +The API documentation for the :mod:`IPython.Magic` module contains the full +docstrings of all currently available magic commands. -Magic commands --------------- - -The rest of this section is automatically generated for each release -from the docstrings in the IPython code. Therefore the formatting is -somewhat minimal, but this method has the advantage of having -information always in sync with the code. - -A list of all the magic commands available in IPython's default -installation follows. This is similar to what you'll see by simply -typing %magic at the prompt, but that will also give you information -about magic commands you may have added as part of your personal -customizations. - -.. magic_start - -**%Exit**:: - - Exit IPython without confirmation. - -**%Pprint**:: - - Toggle pretty printing on/off. - -**%alias**:: - - Define an alias for a system command. - - '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd' - - Then, typing 'alias_name params' will execute the system command 'cmd - params' (from your underlying operating system). - - Aliases have lower precedence than magic functions and Python normal - variables, so if 'foo' is both a Python variable and an alias, the - alias can not be executed until 'del foo' removes the Python variable. - - You can use the %l specifier in an alias definition to represent the - whole line when the alias is called. For example: - - In [2]: alias all echo "Input in brackets: <%l>"\ - In [3]: all hello world\ - Input in brackets: - - You can also define aliases with parameters using %s specifiers (one - per parameter): - - In [1]: alias parts echo first %s second %s\ - In [2]: %parts A B\ - first A second B\ - In [3]: %parts A\ - Incorrect number of arguments: 2 expected.\ - parts is an alias to: 'echo first %s second %s' - - Note that %l and %s are mutually exclusive. You can only use one or - the other in your aliases. - - Aliases expand Python variables just like system calls using ! or !! - do: all expressions prefixed with '$' get expanded. For details of - the semantic rules, see PEP-215: - http://www.python.org/peps/pep-0215.html. This is the library used by - IPython for variable expansion. If you want to access a true shell - variable, an extra $ is necessary to prevent its expansion by IPython: - - In [6]: alias show echo\ - In [7]: PATH='A Python string'\ - In [8]: show $PATH\ - A Python string\ - In [9]: show $$PATH\ - /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:... - - You can use the alias facility to acess all of $PATH. See the %rehash - and %rehashx functions, which automatically create aliases for the - contents of your $PATH. - - If called with no parameters, %alias prints the current alias table. - -**%autocall**:: - - Make functions callable without having to type parentheses. - - Usage: - - %autocall [mode] - - The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the - value is toggled on and off (remembering the previous state). - - In more detail, these values mean: - - 0 -> fully disabled - - 1 -> active, but do not apply if there are no arguments on the line. - - In this mode, you get: - - In [1]: callable - Out[1]: - - In [2]: callable 'hello' - ------> callable('hello') - Out[2]: False - - 2 -> Active always. Even if no arguments are present, the callable - object is called: - - In [4]: callable - ------> callable() - - Note that even with autocall off, you can still use '/' at the start of - a line to treat the first argument on the command line as a function - and add parentheses to it: - - In [8]: /str 43 - ------> str(43) - Out[8]: '43' - -**%autoindent**:: - - Toggle autoindent on/off (if available). - -**%automagic**:: - - Make magic functions callable without having to type the initial %. - - Without argumentsl toggles on/off (when off, you must call it as - %automagic, of course). With arguments it sets the value, and you can - use any of (case insensitive): - - - on,1,True: to activate - - - off,0,False: to deactivate. - - Note that magic functions have lowest priority, so if there's a - variable whose name collides with that of a magic fn, automagic won't - work for that function (you get the variable instead). However, if you - delete the variable (del var), the previously shadowed magic function - becomes visible to automagic again. - -**%bg**:: - - Run a job in the background, in a separate thread. - - For example, - - %bg myfunc(x,y,z=1) - - will execute 'myfunc(x,y,z=1)' in a background thread. As soon as the - execution starts, a message will be printed indicating the job - number. If your job number is 5, you can use - - myvar = jobs.result(5) or myvar = jobs[5].result - - to assign this result to variable 'myvar'. - - IPython has a job manager, accessible via the 'jobs' object. You can - type jobs? to get more information about it, and use jobs. to see - its attributes. All attributes not starting with an underscore are - meant for public use. - - In particular, look at the jobs.new() method, which is used to create - new jobs. This magic %bg function is just a convenience wrapper - around jobs.new(), for expression-based jobs. If you want to create a - new job with an explicit function object and arguments, you must call - jobs.new() directly. - - The jobs.new docstring also describes in detail several important - caveats associated with a thread-based model for background job - execution. Type jobs.new? for details. - - You can check the status of all jobs with jobs.status(). - - The jobs variable is set by IPython into the Python builtin namespace. - If you ever declare a variable named 'jobs', you will shadow this - name. You can either delete your global jobs variable to regain - access to the job manager, or make a new name and assign it manually - to the manager (stored in IPython's namespace). For example, to - assign the job manager to the Jobs name, use: - - Jobs = __builtins__.jobs - -**%bookmark**:: - - Manage IPython's bookmark system. - - %bookmark - set bookmark to current dir - %bookmark - set bookmark to - %bookmark -l - list all bookmarks - %bookmark -d - remove bookmark - %bookmark -r - remove all bookmarks - - You can later on access a bookmarked folder with: - %cd -b - or simply '%cd ' if there is no directory called AND - there is such a bookmark defined. - - Your bookmarks persist through IPython sessions, but they are - associated with each profile. - -**%cd**:: - - Change the current working directory. - - This command automatically maintains an internal list of directories - you visit during your IPython session, in the variable _dh. The - command %dhist shows this history nicely formatted. You can also - do 'cd -' to see directory history conveniently. - - Usage: - - cd 'dir': changes to directory 'dir'. - - cd -: changes to the last visited directory. - - cd -: changes to the n-th directory in the directory history. - - cd -b : jump to a bookmark set by %bookmark - (note: cd is enough if there is no - directory , but a bookmark with the name exists.) - 'cd -b ' allows you to tab-complete bookmark names. - - Options: - - -q: quiet. Do not print the working directory after the cd command is - executed. By default IPython's cd command does print this directory, - since the default prompts do not display path information. - - Note that !cd doesn't work for this purpose because the shell where - !command runs is immediately discarded after executing 'command'. - -**%clear**:: - - Clear various data (e.g. stored history data) - - %clear out - clear output history - %clear in - clear input history - %clear shadow_compress - Compresses shadow history (to speed up ipython) - %clear shadow_nuke - permanently erase all entries in shadow history - %clear dhist - clear dir history - -**%color_info**:: - - Toggle color_info. - - The color_info configuration parameter controls whether colors are - used for displaying object details (by things like %psource, %pfile or - the '?' system). This function toggles this value with each call. - - Note that unless you have a fairly recent pager (less works better - than more) in your system, using colored object information displays - will not work properly. Test it and see. - -**%colors**:: - - Switch color scheme for prompts, info system and exception handlers. - - Currently implemented schemes: NoColor, Linux, LightBG. - - Color scheme names are not case-sensitive. - -**%cpaste**:: - - Allows you to paste & execute a pre-formatted code block from clipboard - - You must terminate the block with '--' (two minus-signs) alone on the - line. You can also provide your own sentinel with '%paste -s %%' ('%%' - is the new sentinel for this operation) - - The block is dedented prior to execution to enable execution of method - definitions. '>' and '+' characters at the beginning of a line are - ignored, to allow pasting directly from e-mails or diff files. The - executed block is also assigned to variable named 'pasted_block' for - later editing with '%edit pasted_block'. - - You can also pass a variable name as an argument, e.g. '%cpaste foo'. - This assigns the pasted block to variable 'foo' as string, without - dedenting or executing it. - - Do not be alarmed by garbled output on Windows (it's a readline bug). - Just press enter and type -- (and press enter again) and the block - will be what was just pasted. - - IPython statements (magics, shell escapes) are not supported (yet). - -**%debug**:: - - Activate the interactive debugger in post-mortem mode. - - If an exception has just occurred, this lets you inspect its stack - frames interactively. Note that this will always work only on the last - traceback that occurred, so you must call this quickly after an - exception that you wish to inspect has fired, because if another one - occurs, it clobbers the previous one. - - If you want IPython to automatically do this on every exception, see - the %pdb magic for more details. - -**%dhist**:: - - Print your history of visited directories. - - %dhist -> print full history\ - %dhist n -> print last n entries only\ - %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\ - - This history is automatically maintained by the %cd command, and - always available as the global list variable _dh. You can use %cd - - to go to directory number . - - Note that most of time, you should view directory history by entering - cd -. - -**%dirs**:: - - Return the current directory stack. - -**%doctest_mode**:: - - Toggle doctest mode on and off. - - This mode allows you to toggle the prompt behavior between normal - IPython prompts and ones that are as similar to the default IPython - interpreter as possible. - - It also supports the pasting of code snippets that have leading '>>>' - and '...' prompts in them. This means that you can paste doctests from - files or docstrings (even if they have leading whitespace), and the - code will execute correctly. You can then use '%history -tn' to see - the translated history without line numbers; this will give you the - input after removal of all the leading prompts and whitespace, which - can be pasted back into an editor. - - With these features, you can switch into this mode easily whenever you - need to do testing and changes to doctests, without having to leave - your existing IPython session. - -**%ed**:: - - Alias to %edit. - -**%edit**:: - - Bring up an editor and execute the resulting code. - - Usage: - %edit [options] [args] - - %edit runs IPython's editor hook. The default version of this hook is - set to call the __IPYTHON__.rc.editor command. This is read from your - environment variable $EDITOR. If this isn't found, it will default to - vi under Linux/Unix and to notepad under Windows. See the end of this - docstring for how to change the editor hook. - - You can also set the value of this editor via the command line option - '-editor' or in your ipythonrc file. This is useful if you wish to use - specifically for IPython an editor different from your typical default - (and for Windows users who typically don't set environment variables). - - This command allows you to conveniently edit multi-line code right in - your IPython session. - - If called without arguments, %edit opens up an empty editor with a - temporary file and will execute the contents of this file when you - close it (don't forget to save it!). - - - Options: - - -n : open the editor at a specified line number. By default, - the IPython editor hook uses the unix syntax 'editor +N filename', but - you can configure this by providing your own modified hook if your - favorite editor supports line-number specifications with a different - syntax. - - -p: this will call the editor with the same data as the previous time - it was used, regardless of how long ago (in your current session) it - was. - - -r: use 'raw' input. This option only applies to input taken from the - user's history. By default, the 'processed' history is used, so that - magics are loaded in their transformed version to valid Python. If - this option is given, the raw input as typed as the command line is - used instead. When you exit the editor, it will be executed by - IPython's own processor. - - -x: do not execute the edited code immediately upon exit. This is - mainly useful if you are editing programs which need to be called with - command line arguments, which you can then do using %run. - - - Arguments: - - If arguments are given, the following possibilites exist: - - - The arguments are numbers or pairs of colon-separated numbers (like - 1 4:8 9). These are interpreted as lines of previous input to be - loaded into the editor. The syntax is the same of the %macro command. - - - If the argument doesn't start with a number, it is evaluated as a - variable and its contents loaded into the editor. You can thus edit - any string which contains python code (including the result of - previous edits). - - - If the argument is the name of an object (other than a string), - IPython will try to locate the file where it was defined and open the - editor at the point where it is defined. You can use `%edit function` - to load an editor exactly at the point where 'function' is defined, - edit it and have the file be executed automatically. - - If the object is a macro (see %macro for details), this opens up your - specified editor with a temporary file containing the macro's data. - Upon exit, the macro is reloaded with the contents of the file. - - Note: opening at an exact line is only supported under Unix, and some - editors (like kedit and gedit up to Gnome 2.8) do not understand the - '+NUMBER' parameter necessary for this feature. Good editors like - (X)Emacs, vi, jed, pico and joe all do. - - - If the argument is not found as a variable, IPython will look for a - file with that name (adding .py if necessary) and load it into the - editor. It will execute its contents with execfile() when you exit, - loading any code in the file into your interactive namespace. - - After executing your code, %edit will return as output the code you - typed in the editor (except when it was an existing file). This way - you can reload the code in further invocations of %edit as a variable, - via _ or Out[], where is the prompt number of - the output. - - Note that %edit is also available through the alias %ed. - - This is an example of creating a simple function inside the editor and - then modifying it. First, start up the editor: - - In [1]: ed\ - Editing... done. Executing edited code...\ - Out[1]: 'def foo():\n print "foo() was defined in an editing session"\n' - - We can then call the function foo(): - - In [2]: foo()\ - foo() was defined in an editing session - - Now we edit foo. IPython automatically loads the editor with the - (temporary) file where foo() was previously defined: - - In [3]: ed foo\ - Editing... done. Executing edited code... - - And if we call foo() again we get the modified version: - - In [4]: foo()\ - foo() has now been changed! - - Here is an example of how to edit a code snippet successive - times. First we call the editor: - - In [8]: ed\ - Editing... done. Executing edited code...\ - hello\ - Out[8]: "print 'hello'\n" - - Now we call it again with the previous output (stored in _): - - In [9]: ed _\ - Editing... done. Executing edited code...\ - hello world\ - Out[9]: "print 'hello world'\n" - - Now we call it with the output #8 (stored in _8, also as Out[8]): - - In [10]: ed _8\ - Editing... done. Executing edited code...\ - hello again\ - Out[10]: "print 'hello again'\n" - - - Changing the default editor hook: - - If you wish to write your own editor hook, you can put it in a - configuration file which you load at startup time. The default hook - is defined in the IPython.hooks module, and you can use that as a - starting example for further modifications. That file also has - general instructions on how to set a new hook for use once you've - defined it. - -**%env**:: - - List environment variables. - -**%exit**:: - - Exit IPython, confirming if configured to do so. - - You can configure whether IPython asks for confirmation upon exit by - setting the confirm_exit flag in the ipythonrc file. - -**%hist**:: - - Alternate name for %history. - -**%history**:: - - Print input history (_i variables), with most recent last. - - %history -> print at most 40 inputs (some may be multi-line)\ - %history n -> print at most n inputs\ - %history n1 n2 -> print inputs between n1 and n2 (n2 not included)\ - - Each input's number is shown, and is accessible as the - automatically generated variable _i. Multi-line statements are - printed starting at a new line for easy copy/paste. - - - Options: - - -n: do NOT print line numbers. This is useful if you want to get a - printout of many lines which can be directly pasted into a text - editor. - - This feature is only available if numbered prompts are in use. - - -t: (default) print the 'translated' history, as IPython understands it. - IPython filters your input and converts it all into valid Python source - before executing it (things like magics or aliases are turned into - function calls, for example). With this option, you'll see the native - history instead of the user-entered version: '%cd /' will be seen as - '_ip.magic("%cd /")' instead of '%cd /'. - - -r: print the 'raw' history, i.e. the actual commands you typed. - - -g: treat the arg as a pattern to grep for in (full) history. - This includes the "shadow history" (almost all commands ever written). - Use '%hist -g' to show full shadow history (may be very long). - In shadow history, every index nuwber starts with 0. - - -f FILENAME: instead of printing the output to the screen, redirect it to - the given file. The file is always overwritten, though IPython asks for - confirmation first if it already exists. - -**%logoff**:: - - Temporarily stop logging. - - You must have previously started logging. - -**%logon**:: - - Restart logging. - - This function is for restarting logging which you've temporarily - stopped with %logoff. For starting logging for the first time, you - must use the %logstart function, which allows you to specify an - optional log filename. - -**%logstart**:: - - Start logging anywhere in a session. - - %logstart [-o|-r|-t] [log_name [log_mode]] - - If no name is given, it defaults to a file named 'ipython_log.py' in your - current directory, in 'rotate' mode (see below). - - '%logstart name' saves to file 'name' in 'backup' mode. It saves your - history up to that point and then continues logging. - - %logstart takes a second optional parameter: logging mode. This can be one - of (note that the modes are given unquoted):\ - append: well, that says it.\ - backup: rename (if exists) to name~ and start name.\ - global: single logfile in your home dir, appended to.\ - over : overwrite existing log.\ - rotate: create rotating logs name.1~, name.2~, etc. - - Options: - - -o: log also IPython's output. In this mode, all commands which - generate an Out[NN] prompt are recorded to the logfile, right after - their corresponding input line. The output lines are always - prepended with a '#[Out]# ' marker, so that the log remains valid - Python code. - - Since this marker is always the same, filtering only the output from - a log is very easy, using for example a simple awk call: - - awk -F'#\[Out\]# ' '{if($2) {print $2}}' ipython_log.py - - -r: log 'raw' input. Normally, IPython's logs contain the processed - input, so that user lines are logged in their final form, converted - into valid Python. For example, %Exit is logged as - '_ip.magic("Exit"). If the -r flag is given, all input is logged - exactly as typed, with no transformations applied. - - -t: put timestamps before each input line logged (these are put in - comments). - -**%logstate**:: - - Print the status of the logging system. - -**%logstop**:: - - Fully stop logging and close log file. - - In order to start logging again, a new %logstart call needs to be made, - possibly (though not necessarily) with a new filename, mode and other - options. - -**%lsmagic**:: - - List currently available magic functions. - -**%macro**:: - - Define a set of input lines as a macro for future re-execution. - - Usage:\ - %macro [options] name n1-n2 n3-n4 ... n5 .. n6 ... - - Options: - - -r: use 'raw' input. By default, the 'processed' history is used, - so that magics are loaded in their transformed version to valid - Python. If this option is given, the raw input as typed as the - command line is used instead. - - This will define a global variable called `name` which is a string - made of joining the slices and lines you specify (n1,n2,... numbers - above) from your input history into a single string. This variable - acts like an automatic function which re-executes those lines as if - you had typed them. You just type 'name' at the prompt and the code - executes. - - The notation for indicating number ranges is: n1-n2 means 'use line - numbers n1,...n2' (the endpoint is included). That is, '5-7' means - using the lines numbered 5,6 and 7. - - Note: as a 'hidden' feature, you can also use traditional python slice - notation, where N:M means numbers N through M-1. - - For example, if your history contains (%hist prints it): - - 44: x=1\ - 45: y=3\ - 46: z=x+y\ - 47: print x\ - 48: a=5\ - 49: print 'x',x,'y',y\ - - you can create a macro with lines 44 through 47 (included) and line 49 - called my_macro with: - - In [51]: %macro my_macro 44-47 49 - - Now, typing `my_macro` (without quotes) will re-execute all this code - in one pass. - - You don't need to give the line-numbers in order, and any given line - number can appear multiple times. You can assemble macros with any - lines from your input history in any order. - - The macro is a simple object which holds its value in an attribute, - but IPython's display system checks for macros and executes them as - code instead of printing them when you type their name. - - You can view a macro's contents by explicitly printing it with: - - 'print macro_name'. - - For one-off cases which DON'T contain magic function calls in them you - can obtain similar results by explicitly executing slices from your - input history with: - - In [60]: exec In[44:48]+In[49] - -**%magic**:: - - Print information about the magic function system. - -**%mglob**:: - - This program allows specifying filenames with "mglob" mechanism. - Supported syntax in globs (wilcard matching patterns):: - - *.cpp ?ellowo* - - obvious. Differs from normal glob in that dirs are not included. - Unix users might want to write this as: "*.cpp" "?ellowo*" - rec:/usr/share=*.txt,*.doc - - get all *.txt and *.doc under /usr/share, - recursively - rec:/usr/share - - All files under /usr/share, recursively - rec:*.py - - All .py files under current working dir, recursively - foo - - File or dir foo - !*.bak readme* - - readme*, exclude files ending with .bak - !.svn/ !.hg/ !*_Data/ rec:. - - Skip .svn, .hg, foo_Data dirs (and their subdirs) in recurse. - Trailing / is the key, \ does not work! - dir:foo - - the directory foo if it exists (not files in foo) - dir:* - - all directories in current folder - foo.py bar.* !h* rec:*.py - - Obvious. !h* exclusion only applies for rec:*.py. - foo.py is *not* included twice. - @filelist.txt - - All files listed in 'filelist.txt' file, on separate lines. - -**%page**:: - - Pretty print the object and display it through a pager. - - %page [options] OBJECT - - If no object is given, use _ (last output). - - Options: - - -r: page str(object), don't pretty-print it. - -**%pdb**:: - - Control the automatic calling of the pdb interactive debugger. - - Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without - argument it works as a toggle. - - When an exception is triggered, IPython can optionally call the - interactive pdb debugger after the traceback printout. %pdb toggles - this feature on and off. - - The initial state of this feature is set in your ipythonrc - configuration file (the variable is called 'pdb'). - - If you want to just activate the debugger AFTER an exception has fired, - without having to type '%pdb on' and rerunning your code, you can use - the %debug magic. - -**%pdef**:: - - Print the definition header for any callable object. - - If the object is a class, print the constructor information. - -**%pdoc**:: - - Print the docstring for an object. - - If the given object is a class, it will print both the class and the - constructor docstrings. - -**%pfile**:: - - Print (or run through pager) the file where an object is defined. - - The file opens at the line where the object definition begins. IPython - will honor the environment variable PAGER if set, and otherwise will - do its best to print the file in a convenient form. - - If the given argument is not an object currently defined, IPython will - try to interpret it as a filename (automatically adding a .py extension - if needed). You can thus use %pfile as a syntax highlighting code - viewer. - -**%pinfo**:: - - Provide detailed information about an object. - - '%pinfo object' is just a synonym for object? or ?object. - -**%popd**:: - - Change to directory popped off the top of the stack. - -**%profile**:: - - Print your currently active IPyhton profile. - -**%prun**:: - - Run a statement through the python code profiler. - - Usage:\ - %prun [options] statement - - The given statement (which doesn't require quote marks) is run via the - python profiler in a manner similar to the profile.run() function. - Namespaces are internally managed to work correctly; profile.run - cannot be used in IPython because it makes certain assumptions about - namespaces which do not hold under IPython. - - Options: - - -l : you can place restrictions on what or how much of the - profile gets printed. The limit value can be: - - * A string: only information for function names containing this string - is printed. - - * An integer: only these many lines are printed. - - * A float (between 0 and 1): this fraction of the report is printed - (for example, use a limit of 0.4 to see the topmost 40% only). - - You can combine several limits with repeated use of the option. For - example, '-l __init__ -l 5' will print only the topmost 5 lines of - information about class constructors. - - -r: return the pstats.Stats object generated by the profiling. This - object has all the information about the profile in it, and you can - later use it for further analysis or in other functions. - - -s : sort profile by given key. You can provide more than one key - by using the option several times: '-s key1 -s key2 -s key3...'. The - default sorting key is 'time'. - - The following is copied verbatim from the profile documentation - referenced below: - - When more than one key is provided, additional keys are used as - secondary criteria when the there is equality in all keys selected - before them. - - Abbreviations can be used for any key names, as long as the - abbreviation is unambiguous. The following are the keys currently - defined: - - Valid Arg Meaning\ - "calls" call count\ - "cumulative" cumulative time\ - "file" file name\ - "module" file name\ - "pcalls" primitive call count\ - "line" line number\ - "name" function name\ - "nfl" name/file/line\ - "stdname" standard name\ - "time" internal time - - Note that all sorts on statistics are in descending order (placing - most time consuming items first), where as name, file, and line number - searches are in ascending order (i.e., alphabetical). The subtle - distinction between "nfl" and "stdname" is that the standard name is a - sort of the name as printed, which means that the embedded line - numbers get compared in an odd way. For example, lines 3, 20, and 40 - would (if the file names were the same) appear in the string order - "20" "3" and "40". In contrast, "nfl" does a numeric compare of the - line numbers. In fact, sort_stats("nfl") is the same as - sort_stats("name", "file", "line"). - - -T : save profile results as shown on screen to a text - file. The profile is still shown on screen. - - -D : save (via dump_stats) profile statistics to given - filename. This data is in a format understod by the pstats module, and - is generated by a call to the dump_stats() method of profile - objects. The profile is still shown on screen. - - If you want to run complete programs under the profiler's control, use - '%run -p [prof_opts] filename.py [args to program]' where prof_opts - contains profiler specific options as described here. - - You can read the complete documentation for the profile module with:\ - In [1]: import profile; profile.help() - -**%psearch**:: - - Search for object in namespaces by wildcard. - - %psearch [options] PATTERN [OBJECT TYPE] - - Note: ? can be used as a synonym for %psearch, at the beginning or at - the end: both a*? and ?a* are equivalent to '%psearch a*'. Still, the - rest of the command line must be unchanged (options come first), so - for example the following forms are equivalent - - %psearch -i a* function - -i a* function? - ?-i a* function - - Arguments: - - PATTERN - - where PATTERN is a string containing * as a wildcard similar to its - use in a shell. The pattern is matched in all namespaces on the - search path. By default objects starting with a single _ are not - matched, many IPython generated objects have a single - underscore. The default is case insensitive matching. Matching is - also done on the attributes of objects and not only on the objects - in a module. - - [OBJECT TYPE] - - Is the name of a python type from the types module. The name is - given in lowercase without the ending type, ex. StringType is - written string. By adding a type here only objects matching the - given type are matched. Using all here makes the pattern match all - types (this is the default). - - Options: - - -a: makes the pattern match even objects whose names start with a - single underscore. These names are normally ommitted from the - search. - - -i/-c: make the pattern case insensitive/sensitive. If neither of - these options is given, the default is read from your ipythonrc - file. The option name which sets this value is - 'wildcards_case_sensitive'. If this option is not specified in your - ipythonrc file, IPython's internal default is to do a case sensitive - search. - - -e/-s NAMESPACE: exclude/search a given namespace. The pattern you - specifiy can be searched in any of the following namespaces: - 'builtin', 'user', 'user_global','internal', 'alias', where - 'builtin' and 'user' are the search defaults. Note that you should - not use quotes when specifying namespaces. - - 'Builtin' contains the python module builtin, 'user' contains all - user data, 'alias' only contain the shell aliases and no python - objects, 'internal' contains objects used by IPython. The - 'user_global' namespace is only used by embedded IPython instances, - and it contains module-level globals. You can add namespaces to the - search with -s or exclude them with -e (these options can be given - more than once). - - Examples: - - %psearch a* -> objects beginning with an a - %psearch -e builtin a* -> objects NOT in the builtin space starting in a - %psearch a* function -> all functions beginning with an a - %psearch re.e* -> objects beginning with an e in module re - %psearch r*.e* -> objects that start with e in modules starting in r - %psearch r*.* string -> all strings in modules beginning with r - - Case sensitve search: - - %psearch -c a* list all object beginning with lower case a - - Show objects beginning with a single _: - - %psearch -a _* list objects beginning with a single underscore - -**%psource**:: - - Print (or run through pager) the source code for an object. - -**%pushd**:: - - Place the current dir on stack and change directory. - - Usage:\ - %pushd ['dirname'] - -**%pwd**:: - - Return the current working directory path. - -**%pycat**:: - - Show a syntax-highlighted file through a pager. - - This magic is similar to the cat utility, but it will assume the file - to be Python source and will show it with syntax highlighting. - -**%quickref**:: - - Show a quick reference sheet - -**%quit**:: - - Exit IPython, confirming if configured to do so (like %exit) - -**%r**:: - - Repeat previous input. - - Note: Consider using the more powerfull %rep instead! - - If given an argument, repeats the previous command which starts with - the same string, otherwise it just repeats the previous input. - - Shell escaped commands (with ! as first character) are not recognized - by this system, only pure python code and magic commands. - -**%rehashdir**:: - - Add executables in all specified dirs to alias table - - Usage: - - %rehashdir c:/bin;c:/tools - - Add all executables under c:/bin and c:/tools to alias table, in - order to make them directly executable from any directory. - - Without arguments, add all executables in current directory. - -**%rehashx**:: - - Update the alias table with all executable files in $PATH. - - This version explicitly checks that every entry in $PATH is a file - with execute access (os.X_OK), so it is much slower than %rehash. - - Under Windows, it checks executability as a match agains a - '|'-separated string of extensions, stored in the IPython config - variable win_exec_ext. This defaults to 'exe|com|bat'. - - This function also resets the root module cache of module completer, - used on slow filesystems. - -**%rep**:: - - Repeat a command, or get command to input line for editing - - - %rep (no arguments): - - Place a string version of last computation result (stored in the special '_' - variable) to the next input prompt. Allows you to create elaborate command - lines without using copy-paste:: - - $ l = ["hei", "vaan"] - $ "".join(l) - ==> heivaan - $ %rep - $ heivaan_ <== cursor blinking - - %rep 45 - - Place history line 45 to next input prompt. Use %hist to find out the - number. - - %rep 1-4 6-7 3 - - Repeat the specified lines immediately. Input slice syntax is the same as - in %macro and %save. - - %rep foo - - Place the most recent line that has the substring "foo" to next input. - (e.g. 'svn ci -m foobar'). - -**%reset**:: - - Resets the namespace by removing all names defined by the user. - - Input/Output history are left around in case you need them. - -**%run**:: - - Run the named file inside IPython as a program. - - Usage:\ - %run [-n -i -t [-N] -d [-b] -p [profile options]] file [args] - - Parameters after the filename are passed as command-line arguments to - the program (put in sys.argv). Then, control returns to IPython's - prompt. - - This is similar to running at a system prompt:\ - $ python file args\ - but with the advantage of giving you IPython's tracebacks, and of - loading all variables into your interactive namespace for further use - (unless -p is used, see below). - - The file is executed in a namespace initially consisting only of - __name__=='__main__' and sys.argv constructed as indicated. It thus - sees its environment as if it were being run as a stand-alone program - (except for sharing global objects such as previously imported - modules). But after execution, the IPython interactive namespace gets - updated with all variables defined in the program (except for __name__ - and sys.argv). This allows for very convenient loading of code for - interactive work, while giving each program a 'clean sheet' to run in. - - Options: - - -n: __name__ is NOT set to '__main__', but to the running file's name - without extension (as python does under import). This allows running - scripts and reloading the definitions in them without calling code - protected by an ' if __name__ == "__main__" ' clause. - - -i: run the file in IPython's namespace instead of an empty one. This - is useful if you are experimenting with code written in a text editor - which depends on variables defined interactively. - - -e: ignore sys.exit() calls or SystemExit exceptions in the script - being run. This is particularly useful if IPython is being used to - run unittests, which always exit with a sys.exit() call. In such - cases you are interested in the output of the test results, not in - seeing a traceback of the unittest module. - - -t: print timing information at the end of the run. IPython will give - you an estimated CPU time consumption for your script, which under - Unix uses the resource module to avoid the wraparound problems of - time.clock(). Under Unix, an estimate of time spent on system tasks - is also given (for Windows platforms this is reported as 0.0). - - If -t is given, an additional -N option can be given, where - must be an integer indicating how many times you want the script to - run. The final timing report will include total and per run results. - - For example (testing the script uniq_stable.py): - - In [1]: run -t uniq_stable - - IPython CPU timings (estimated):\ - User : 0.19597 s.\ - System: 0.0 s.\ - - In [2]: run -t -N5 uniq_stable - - IPython CPU timings (estimated):\ - Total runs performed: 5\ - Times : Total Per run\ - User : 0.910862 s, 0.1821724 s.\ - System: 0.0 s, 0.0 s. - - -d: run your program under the control of pdb, the Python debugger. - This allows you to execute your program step by step, watch variables, - etc. Internally, what IPython does is similar to calling: - - pdb.run('execfile("YOURFILENAME")') - - with a breakpoint set on line 1 of your file. You can change the line - number for this automatic breakpoint to be by using the -bN option - (where N must be an integer). For example: - - %run -d -b40 myscript - - will set the first breakpoint at line 40 in myscript.py. Note that - the first breakpoint must be set on a line which actually does - something (not a comment or docstring) for it to stop execution. - - When the pdb debugger starts, you will see a (Pdb) prompt. You must - first enter 'c' (without qoutes) to start execution up to the first - breakpoint. - - Entering 'help' gives information about the use of the debugger. You - can easily see pdb's full documentation with "import pdb;pdb.help()" - at a prompt. - - -p: run program under the control of the Python profiler module (which - prints a detailed report of execution times, function calls, etc). - - You can pass other options after -p which affect the behavior of the - profiler itself. See the docs for %prun for details. - - In this mode, the program's variables do NOT propagate back to the - IPython interactive namespace (because they remain in the namespace - where the profiler executes them). - - Internally this triggers a call to %prun, see its documentation for - details on the options available specifically for profiling. - - There is one special usage for which the text above doesn't apply: - if the filename ends with .ipy, the file is run as ipython script, - just as if the commands were written on IPython prompt. - -**%runlog**:: - - Run files as logs. - - Usage:\ - %runlog file1 file2 ... - - Run the named files (treating them as log files) in sequence inside - the interpreter, and return to the prompt. This is much slower than - %run because each line is executed in a try/except block, but it - allows running files with syntax errors in them. - - Normally IPython will guess when a file is one of its own logfiles, so - you can typically use %run even for logs. This shorthand allows you to - force any file to be treated as a log file. - -**%save**:: - - Save a set of lines to a given filename. - - Usage:\ - %save [options] filename n1-n2 n3-n4 ... n5 .. n6 ... - - Options: - - -r: use 'raw' input. By default, the 'processed' history is used, - so that magics are loaded in their transformed version to valid - Python. If this option is given, the raw input as typed as the - command line is used instead. - - This function uses the same syntax as %macro for line extraction, but - instead of creating a macro it saves the resulting string to the - filename you specify. - - It adds a '.py' extension to the file if you don't do so yourself, and - it asks for confirmation before overwriting existing files. - -**%sc**:: - - Shell capture - execute a shell command and capture its output. - - DEPRECATED. Suboptimal, retained for backwards compatibility. - - You should use the form 'var = !command' instead. Example: - - "%sc -l myfiles = ls ~" should now be written as - - "myfiles = !ls ~" - - myfiles.s, myfiles.l and myfiles.n still apply as documented - below. - - -- - %sc [options] varname=command - - IPython will run the given command using commands.getoutput(), and - will then update the user's interactive namespace with a variable - called varname, containing the value of the call. Your command can - contain shell wildcards, pipes, etc. - - The '=' sign in the syntax is mandatory, and the variable name you - supply must follow Python's standard conventions for valid names. - - (A special format without variable name exists for internal use) - - Options: - - -l: list output. Split the output on newlines into a list before - assigning it to the given variable. By default the output is stored - as a single string. - - -v: verbose. Print the contents of the variable. - - In most cases you should not need to split as a list, because the - returned value is a special type of string which can automatically - provide its contents either as a list (split on newlines) or as a - space-separated string. These are convenient, respectively, either - for sequential processing or to be passed to a shell command. - - For example: - - # Capture into variable a - In [9]: sc a=ls *py - - # a is a string with embedded newlines - In [10]: a - Out[10]: 'setup.py win32_manual_post_install.py' - - # which can be seen as a list: - In [11]: a.l - Out[11]: ['setup.py', 'win32_manual_post_install.py'] - - # or as a whitespace-separated string: - In [12]: a.s - Out[12]: 'setup.py win32_manual_post_install.py' - - # a.s is useful to pass as a single command line: - In [13]: !wc -l $a.s - 146 setup.py - 130 win32_manual_post_install.py - 276 total - - # while the list form is useful to loop over: - In [14]: for f in a.l: - ....: !wc -l $f - ....: - 146 setup.py - 130 win32_manual_post_install.py - - Similiarly, the lists returned by the -l option are also special, in - the sense that you can equally invoke the .s attribute on them to - automatically get a whitespace-separated string from their contents: - - In [1]: sc -l b=ls *py - - In [2]: b - Out[2]: ['setup.py', 'win32_manual_post_install.py'] - - In [3]: b.s - Out[3]: 'setup.py win32_manual_post_install.py' - - In summary, both the lists and strings used for ouptut capture have - the following special attributes: - - .l (or .list) : value as list. - .n (or .nlstr): value as newline-separated string. - .s (or .spstr): value as space-separated string. - -**%store**:: - - Lightweight persistence for python variables. - - Example: - - ville@badger[~]|1> A = ['hello',10,'world']\ - ville@badger[~]|2> %store A\ - ville@badger[~]|3> Exit - - (IPython session is closed and started again...) - - ville@badger:~$ ipython -p pysh\ - ville@badger[~]|1> print A - - ['hello', 10, 'world'] - - Usage: - - %store - Show list of all variables and their current values\ - %store - Store the *current* value of the variable to disk\ - %store -d - Remove the variable and its value from storage\ - %store -z - Remove all variables from storage\ - %store -r - Refresh all variables from store (delete current vals)\ - %store foo >a.txt - Store value of foo to new file a.txt\ - %store foo >>a.txt - Append value of foo to file a.txt\ - - It should be noted that if you change the value of a variable, you - need to %store it again if you want to persist the new value. - - Note also that the variables will need to be pickleable; most basic - python types can be safely %stored. - - Also aliases can be %store'd across sessions. - -**%sx**:: - - Shell execute - run a shell command and capture its output. - - %sx command - - IPython will run the given command using commands.getoutput(), and - return the result formatted as a list (split on '\n'). Since the - output is _returned_, it will be stored in ipython's regular output - cache Out[N] and in the '_N' automatic variables. - - Notes: - - 1) If an input line begins with '!!', then %sx is automatically - invoked. That is, while: - !ls - causes ipython to simply issue system('ls'), typing - !!ls - is a shorthand equivalent to: - %sx ls - - 2) %sx differs from %sc in that %sx automatically splits into a list, - like '%sc -l'. The reason for this is to make it as easy as possible - to process line-oriented shell output via further python commands. - %sc is meant to provide much finer control, but requires more - typing. - - 3) Just like %sc -l, this is a list with special attributes: - - .l (or .list) : value as list. - .n (or .nlstr): value as newline-separated string. - .s (or .spstr): value as whitespace-separated string. - - This is very useful when trying to use such lists as arguments to - system commands. - -**%system_verbose**:: - - Set verbose printing of system calls. - - If called without an argument, act as a toggle - -**%time**:: - - Time execution of a Python statement or expression. - - The CPU and wall clock times are printed, and the value of the - expression (if any) is returned. Note that under Win32, system time - is always reported as 0, since it can not be measured. - - This function provides very basic timing functionality. In Python - 2.3, the timeit module offers more control and sophistication, so this - could be rewritten to use it (patches welcome). - - Some examples: - - In [1]: time 2**128 - CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s - Wall time: 0.00 - Out[1]: 340282366920938463463374607431768211456L - - In [2]: n = 1000000 - - In [3]: time sum(range(n)) - CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s - Wall time: 1.37 - Out[3]: 499999500000L - - In [4]: time print 'hello world' - hello world - CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s - Wall time: 0.00 - - Note that the time needed by Python to compile the given expression - will be reported if it is more than 0.1s. In this example, the - actual exponentiation is done by Python at compilation time, so while - the expression can take a noticeable amount of time to compute, that - time is purely due to the compilation: - - In [5]: time 3**9999; - CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s - Wall time: 0.00 s - - In [6]: time 3**999999; - CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s - Wall time: 0.00 s - Compiler : 0.78 s - -**%timeit**:: - - Time execution of a Python statement or expression - - Usage:\ - %timeit [-n -r [-t|-c]] statement - - Time execution of a Python statement or expression using the timeit - module. - - Options: - -n: execute the given statement times in a loop. If this value - is not given, a fitting value is chosen. - - -r: repeat the loop iteration times and take the best result. - Default: 3 - - -t: use time.time to measure the time, which is the default on Unix. - This function measures wall time. - - -c: use time.clock to measure the time, which is the default on - Windows and measures wall time. On Unix, resource.getrusage is used - instead and returns the CPU user time. - - -p

: use a precision of

digits to display the timing result. - Default: 3 - - - Examples:\ - In [1]: %timeit pass - 10000000 loops, best of 3: 53.3 ns per loop - - In [2]: u = None - - In [3]: %timeit u is None - 10000000 loops, best of 3: 184 ns per loop - - In [4]: %timeit -r 4 u == None - 1000000 loops, best of 4: 242 ns per loop - - In [5]: import time - - In [6]: %timeit -n1 time.sleep(2) - 1 loops, best of 3: 2 s per loop - - - The times reported by %timeit will be slightly higher than those - reported by the timeit.py script when variables are accessed. This is - due to the fact that %timeit executes the statement in the namespace - of the shell, compared with timeit.py, which uses a single setup - statement to import function or create variables. Generally, the bias - does not matter as long as results from timeit.py are not mixed with - those from %timeit. - -**%unalias**:: - - Remove an alias - -**%upgrade**:: - - Upgrade your IPython installation - - This will copy the config files that don't yet exist in your - ipython dir from the system config dir. Use this after upgrading - IPython if you don't wish to delete your .ipython dir. - - Call with -nolegacy to get rid of ipythonrc* files (recommended for - new users) - -**%which**:: - - %which => search PATH for files matching cmd. Also scans aliases. - - Traverses PATH and prints all files (not just executables!) that match the - pattern on command line. Probably more useful in finding stuff - interactively than 'which', which only prints the first matching item. - - Also discovers and expands aliases, so you'll see what will be executed - when you call an alias. - - Example: - - [~]|62> %which d - d -> ls -F --color=auto - == c:\cygwin\bin\ls.exe - c:\cygwin\bin\d.exe - - [~]|64> %which diff* - diff3 -> diff3 - == c:\cygwin\bin\diff3.exe - diff -> diff - == c:\cygwin\bin\diff.exe - c:\cygwin\bin\diff.exe - c:\cygwin\bin\diff3.exe - -**%who**:: - - Print all interactive variables, with some minimal formatting. - - If any arguments are given, only variables whose type matches one of - these are printed. For example: - - %who function str - - will only list functions and strings, excluding all other types of - variables. To find the proper type names, simply use type(var) at a - command line to see how python prints type names. For example: - - In [1]: type('hello')\ - Out[1]: - - indicates that the type name for strings is 'str'. - - %who always excludes executed names loaded through your configuration - file and things which are internal to IPython. - - This is deliberate, as typically you may load many modules and the - purpose of %who is to show you only what you've manually defined. - -**%who_ls**:: - - Return a sorted list of all interactive variables. - - If arguments are given, only variables of types matching these - arguments are returned. - -**%whos**:: - - Like %who, but gives some extra information about each variable. - - The same type filtering of %who can be applied here. - - For all variables, the type is printed. Additionally it prints: - - - For {},[],(): their length. - - - For numpy and Numeric arrays, a summary with shape, number of - elements, typecode and size in memory. - - - Everything else: a string representation, snipping their middle if - too long. - -**%xmode**:: - - Switch modes for the exception handlers. - - Valid modes: Plain, Context and Verbose. - - If called without arguments, acts as a toggle. - -.. magic_end Access to the standard Python help ---------------------------------- diff --git a/docs/source/parallel/vision_beam_pattern.png b/docs/source/parallel/vision_beam_pattern.png new file mode 100644 index 0000000000000000000000000000000000000000..e00a01a37fc1cb9182c3f16f29434150c54a75c3 GIT binary patch literal 151053 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 Fe*x%3>r(&# literal 0 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 Qe+S4tRF*E1eD3@I0aS)fzW@LL literal 0 Hc$@ + + ---------------------------------------------------------------------- + Ran 419 tests in 33.971s + + FAILED (SKIP=4, errors=1) + +In three more runs of the test suite I was able to reproduce this error +sometimes but not always; for now I think we can move on but we need to +investigate further. Especially if we start seeing problems in real use (the +test suite stresses the networking layer in particular ways that aren't +necessarily typical of normal use). + +Next, I started an 8-engine cluster via:: + + perez@opt-login01[~]> ipcluster -n 8 + Starting controller: Controller PID: 30845 + ^X Starting engines: Engines PIDs: [30846, 30847, 30848, 30849, + 30850, 30851, 30852, 30853] + Log files: /home/perez/.ipython/log/ipcluster-30845-* + + Your cluster is up and running. + + [... etc] + +and in a separate ipython session checked that the cluster is running and I can +access all the engines:: + + In [1]: from IPython.kernel import client + + In [2]: mec = client.MultiEngineClient() + + In [3]: mec.get_ids() + Out[3]: [0, 1, 2, 3, 4, 5, 6, 7] + +and run trivial code in them (after importing the ``random`` module in all +engines):: + + In [11]: mec.execute("x=random.randint(0,10)") + Out[11]: + + [0] In [3]: x=random.randint(0,10) + [1] In [3]: x=random.randint(0,10) + [2] In [3]: x=random.randint(0,10) + [3] In [3]: x=random.randint(0,10) + [4] In [3]: x=random.randint(0,10) + [5] In [3]: x=random.randint(0,10) + [6] In [3]: x=random.randint(0,10) + [7] In [3]: x=random.randint(0,10) + + In [12]: mec.pull('x') + Out[12]: [10, 0, 8, 10, 2, 9, 10, 7] + + +We'll continue conducting more complex tests later, including instaling Vision +locally and running the beam demo. + + +Michel's original instructions +============================== + +I got a Vision network that reproduces the beam pattern demo working: + +.. image:: vision_beam_pattern.png + :width: 400 + :target: vision_beam_pattern.png + :align: center + + +I created a package called beamPattern that provides the function run() in its +__init__.py file. + +A subpackage beamPattern/VisionInterface provides Vision nodes for: + +- computing Elevation and Azimuth from a 3D vector + +- Reading .mat files + +- taking the results gathered from the engines and creating the output that a + single engine would have had produced + +The Mec node connect to a controller. In my network it was local but an furl +can be specified to connect to a remote controller. + +The PRun Func node is from the IPython library of nodes. the import statement +is used to get the run function from the beamPattern package and bu puting +"run" in the function entry of this node we push this function to the engines. +In addition to the node will create input ports for all arguments of the +function being pushed (i.e. the run function) + +The second input port on PRun Fun take an integer specifying the rank of the +argument we want to scatter. All other arguments will be pushed to the engines. + +The ElevAzim node has a 3D vector widget and computes the El And Az values +which are passed into the PRun Fun node through the ports created +automatically. The Mat node allows to select the .mat file, reads it and passed +the data to the locdata port created automatically on PRun Func + +The calculation is executed in parallel, and the results are gathered and +output. Instead of having a list of 3 vectors we nd up with a list of n*3 +vectors where n is the number of engines. unpackDectorResults will turn it into +a list of 3. We then plot x, y, and 10*log10(z) + + +Installation +------------ + +- inflate beamPattern into the site-packages directory for the MGL tools. + +- place the appended IPythonNodes.py and StandardNodes.py into the Vision + package of the MGL tools. + +- place the appended items.py in the NetworkEditor package of the MGL tools + +- run vision for the network beamPat5_net.py:: + + vision beamPat5_net.py + +Once the network is running, you can: + +- double click on the MEC node and either use an emptty string for the furl to + connect to a local engine or cut and paste the furl to the engine you want to + use + +- click on the yellow lighting bold to run the network. + +- Try modifying the MAT file or change the Vector used top compute elevation + and Azimut. + + +Fernando's notes +================ + +- I had to install IPython and all its dependencies for the python used by the + MGL tools. + +- Then I had to install scipy 0.6.0 for it, since the nodes needed Scipy. To + do this I sourced the mglenv.sh script and then ran:: + + python setup.py install --prefix=~/usr/opt/mgl + + +Using PBS +========= + +The following PBS script can be used to start the engines:: + + #PBS -N bgranger-ipython + #PBS -j oe + #PBS -l walltime=00:10:00 + #PBS -l nodes=4:ppn=4 + + cd $PBS_O_WORKDIR + export PATH=$HOME/usr/local/bin + export PYTHONPATH=$HOME/usr/local/lib/python2.4/site-packages + /usr/local/bin/mpiexec -n 16 ipengine + + +If this file is called ``ipython_pbs.sh``, then the in one login windows +(i.e. on the head-node -- ``opt-login01.osc.edu``), run ``ipcontroller``. In +another login window on the same node, run the above script:: + + qsub ipython_pbs.sh + +If you look at the first window, you will see some diagnostic output +from ipcontroller. You can then get the furl from your own +``~/.ipython/security`` directory and then connect to it remotely. + +You might need to set up an SSH tunnel, however; if this doesn't work as +advertised:: + + ssh -L 10115:localhost:10105 bic + + +Links to other resources +======================== + +- http://www.osc.edu/~unpingco/glenn_NewLynx2_Demo.avi + diff --git a/docs/sphinxext/docscrape.py b/docs/sphinxext/docscrape.py new file mode 100644 index 0000000..f374b3d --- /dev/null +++ b/docs/sphinxext/docscrape.py @@ -0,0 +1,497 @@ +"""Extract reference documentation from the NumPy source tree. + +""" + +import inspect +import textwrap +import re +import pydoc +from StringIO import StringIO +from warnings import warn +4 +class Reader(object): + """A line-based string reader. + + """ + def __init__(self, data): + """ + Parameters + ---------- + data : str + String with lines separated by '\n'. + + """ + if isinstance(data,list): + self._str = data + else: + self._str = data.split('\n') # store string as list of lines + + self.reset() + + def __getitem__(self, n): + return self._str[n] + + def reset(self): + self._l = 0 # current line nr + + def read(self): + if not self.eof(): + out = self[self._l] + self._l += 1 + return out + else: + return '' + + def seek_next_non_empty_line(self): + for l in self[self._l:]: + if l.strip(): + break + else: + self._l += 1 + + def eof(self): + return self._l >= len(self._str) + + def read_to_condition(self, condition_func): + start = self._l + for line in self[start:]: + if condition_func(line): + return self[start:self._l] + self._l += 1 + if self.eof(): + return self[start:self._l+1] + return [] + + def read_to_next_empty_line(self): + self.seek_next_non_empty_line() + def is_empty(line): + return not line.strip() + return self.read_to_condition(is_empty) + + def read_to_next_unindented_line(self): + def is_unindented(line): + return (line.strip() and (len(line.lstrip()) == len(line))) + return self.read_to_condition(is_unindented) + + def peek(self,n=0): + if self._l + n < len(self._str): + return self[self._l + n] + else: + return '' + + def is_empty(self): + return not ''.join(self._str).strip() + + +class NumpyDocString(object): + def __init__(self,docstring): + docstring = textwrap.dedent(docstring).split('\n') + + self._doc = Reader(docstring) + self._parsed_data = { + 'Signature': '', + 'Summary': [''], + 'Extended Summary': [], + 'Parameters': [], + 'Returns': [], + 'Raises': [], + 'Warns': [], + 'Other Parameters': [], + 'Attributes': [], + 'Methods': [], + 'See Also': [], + 'Notes': [], + 'Warnings': [], + 'References': '', + 'Examples': '', + 'index': {} + } + + self._parse() + + def __getitem__(self,key): + return self._parsed_data[key] + + def __setitem__(self,key,val): + if not self._parsed_data.has_key(key): + warn("Unknown section %s" % key) + else: + self._parsed_data[key] = val + + def _is_at_section(self): + self._doc.seek_next_non_empty_line() + + if self._doc.eof(): + return False + + l1 = self._doc.peek().strip() # e.g. Parameters + + if l1.startswith('.. index::'): + return True + + l2 = self._doc.peek(1).strip() # ---------- or ========== + return l2.startswith('-'*len(l1)) or l2.startswith('='*len(l1)) + + def _strip(self,doc): + i = 0 + j = 0 + for i,line in enumerate(doc): + if line.strip(): break + + for j,line in enumerate(doc[::-1]): + if line.strip(): break + + return doc[i:len(doc)-j] + + def _read_to_next_section(self): + section = self._doc.read_to_next_empty_line() + + while not self._is_at_section() and not self._doc.eof(): + if not self._doc.peek(-1).strip(): # previous line was empty + section += [''] + + section += self._doc.read_to_next_empty_line() + + return section + + def _read_sections(self): + while not self._doc.eof(): + data = self._read_to_next_section() + name = data[0].strip() + + if name.startswith('..'): # index section + yield name, data[1:] + elif len(data) < 2: + yield StopIteration + else: + yield name, self._strip(data[2:]) + + def _parse_param_list(self,content): + r = Reader(content) + params = [] + while not r.eof(): + header = r.read().strip() + if ' : ' in header: + arg_name, arg_type = header.split(' : ')[:2] + else: + arg_name, arg_type = header, '' + + desc = r.read_to_next_unindented_line() + desc = dedent_lines(desc) + + params.append((arg_name,arg_type,desc)) + + return params + + + _name_rgx = re.compile(r"^\s*(:(?P\w+):`(?P[a-zA-Z0-9_.-]+)`|" + r" (?P[a-zA-Z0-9_.-]+))\s*", re.X) + def _parse_see_also(self, content): + """ + func_name : Descriptive text + continued text + another_func_name : Descriptive text + func_name1, func_name2, :meth:`func_name`, func_name3 + + """ + items = [] + + def parse_item_name(text): + """Match ':role:`name`' or 'name'""" + m = self._name_rgx.match(text) + if m: + g = m.groups() + if g[1] is None: + return g[3], None + else: + return g[2], g[1] + raise ValueError("%s is not a item name" % text) + + def push_item(name, rest): + if not name: + return + name, role = parse_item_name(name) + items.append((name, list(rest), role)) + del rest[:] + + current_func = None + rest = [] + + for line in content: + if not line.strip(): continue + + m = self._name_rgx.match(line) + if m and line[m.end():].strip().startswith(':'): + push_item(current_func, rest) + current_func, line = line[:m.end()], line[m.end():] + rest = [line.split(':', 1)[1].strip()] + if not rest[0]: + rest = [] + elif not line.startswith(' '): + push_item(current_func, rest) + current_func = None + if ',' in line: + for func in line.split(','): + push_item(func, []) + elif line.strip(): + current_func = line + elif current_func is not None: + rest.append(line.strip()) + push_item(current_func, rest) + return items + + def _parse_index(self, section, content): + """ + .. index: default + :refguide: something, else, and more + + """ + def strip_each_in(lst): + return [s.strip() for s in lst] + + out = {} + section = section.split('::') + if len(section) > 1: + out['default'] = strip_each_in(section[1].split(','))[0] + for line in content: + line = line.split(':') + if len(line) > 2: + out[line[1]] = strip_each_in(line[2].split(',')) + return out + + def _parse_summary(self): + """Grab signature (if given) and summary""" + if self._is_at_section(): + return + + summary = self._doc.read_to_next_empty_line() + summary_str = " ".join([s.strip() for s in summary]).strip() + if re.compile('^([\w., ]+=)?\s*[\w\.]+\(.*\)$').match(summary_str): + self['Signature'] = summary_str + if not self._is_at_section(): + self['Summary'] = self._doc.read_to_next_empty_line() + else: + self['Summary'] = summary + + if not self._is_at_section(): + self['Extended Summary'] = self._read_to_next_section() + + def _parse(self): + self._doc.reset() + self._parse_summary() + + for (section,content) in self._read_sections(): + if not section.startswith('..'): + section = ' '.join([s.capitalize() for s in section.split(' ')]) + if section in ('Parameters', 'Attributes', 'Methods', + 'Returns', 'Raises', 'Warns'): + self[section] = self._parse_param_list(content) + elif section.startswith('.. index::'): + self['index'] = self._parse_index(section, content) + elif section == 'See Also': + self['See Also'] = self._parse_see_also(content) + else: + self[section] = content + + # string conversion routines + + def _str_header(self, name, symbol='-'): + return [name, len(name)*symbol] + + def _str_indent(self, doc, indent=4): + out = [] + for line in doc: + out += [' '*indent + line] + return out + + def _str_signature(self): + if self['Signature']: + return [self['Signature'].replace('*','\*')] + [''] + else: + return [''] + + def _str_summary(self): + if self['Summary']: + return self['Summary'] + [''] + else: + return [] + + def _str_extended_summary(self): + if self['Extended Summary']: + return self['Extended Summary'] + [''] + else: + return [] + + def _str_param_list(self, name): + out = [] + if self[name]: + out += self._str_header(name) + for param,param_type,desc in self[name]: + out += ['%s : %s' % (param, param_type)] + out += self._str_indent(desc) + out += [''] + return out + + def _str_section(self, name): + out = [] + if self[name]: + out += self._str_header(name) + out += self[name] + out += [''] + return out + + def _str_see_also(self, func_role): + if not self['See Also']: return [] + out = [] + out += self._str_header("See Also") + last_had_desc = True + for func, desc, role in self['See Also']: + if role: + link = ':%s:`%s`' % (role, func) + elif func_role: + link = ':%s:`%s`' % (func_role, func) + else: + link = "`%s`_" % func + if desc or last_had_desc: + out += [''] + out += [link] + else: + out[-1] += ", %s" % link + if desc: + out += self._str_indent([' '.join(desc)]) + last_had_desc = True + else: + last_had_desc = False + out += [''] + return out + + def _str_index(self): + idx = self['index'] + out = [] + out += ['.. index:: %s' % idx.get('default','')] + for section, references in idx.iteritems(): + if section == 'default': + continue + out += [' :%s: %s' % (section, ', '.join(references))] + return out + + def __str__(self, func_role=''): + out = [] + out += self._str_signature() + out += self._str_summary() + out += self._str_extended_summary() + for param_list in ('Parameters','Returns','Raises'): + out += self._str_param_list(param_list) + out += self._str_section('Warnings') + out += self._str_see_also(func_role) + for s in ('Notes','References','Examples'): + out += self._str_section(s) + out += self._str_index() + return '\n'.join(out) + + +def indent(str,indent=4): + indent_str = ' '*indent + if str is None: + return indent_str + lines = str.split('\n') + return '\n'.join(indent_str + l for l in lines) + +def dedent_lines(lines): + """Deindent a list of lines maximally""" + return textwrap.dedent("\n".join(lines)).split("\n") + +def header(text, style='-'): + return text + '\n' + style*len(text) + '\n' + + +class FunctionDoc(NumpyDocString): + def __init__(self, func, role='func', doc=None): + self._f = func + self._role = role # e.g. "func" or "meth" + if doc is None: + doc = inspect.getdoc(func) or '' + try: + NumpyDocString.__init__(self, doc) + except ValueError, e: + print '*'*78 + print "ERROR: '%s' while parsing `%s`" % (e, self._f) + print '*'*78 + #print "Docstring follows:" + #print doclines + #print '='*78 + + if not self['Signature']: + func, func_name = self.get_func() + try: + # try to read signature + argspec = inspect.getargspec(func) + argspec = inspect.formatargspec(*argspec) + argspec = argspec.replace('*','\*') + signature = '%s%s' % (func_name, argspec) + except TypeError, e: + signature = '%s()' % func_name + self['Signature'] = signature + + def get_func(self): + func_name = getattr(self._f, '__name__', self.__class__.__name__) + if inspect.isclass(self._f): + func = getattr(self._f, '__call__', self._f.__init__) + else: + func = self._f + return func, func_name + + def __str__(self): + out = '' + + func, func_name = self.get_func() + signature = self['Signature'].replace('*', '\*') + + roles = {'func': 'function', + 'meth': 'method'} + + if self._role: + if not roles.has_key(self._role): + print "Warning: invalid role %s" % self._role + out += '.. %s:: %s\n \n\n' % (roles.get(self._role,''), + func_name) + + out += super(FunctionDoc, self).__str__(func_role=self._role) + return out + + +class ClassDoc(NumpyDocString): + def __init__(self,cls,modulename='',func_doc=FunctionDoc,doc=None): + if not inspect.isclass(cls): + raise ValueError("Initialise using a class. Got %r" % cls) + self._cls = cls + + if modulename and not modulename.endswith('.'): + modulename += '.' + self._mod = modulename + self._name = cls.__name__ + self._func_doc = func_doc + + if doc is None: + doc = pydoc.getdoc(cls) + + NumpyDocString.__init__(self, doc) + + @property + def methods(self): + return [name for name,func in inspect.getmembers(self._cls) + if not name.startswith('_') and callable(func)] + + def __str__(self): + out = '' + out += super(ClassDoc, self).__str__() + out += "\n\n" + + #for m in self.methods: + # print "Parsing `%s`" % m + # out += str(self._func_doc(getattr(self._cls,m), 'meth')) + '\n\n' + # out += '.. index::\n single: %s; %s\n\n' % (self._name, m) + + return out + + diff --git a/docs/sphinxext/docscrape_sphinx.py b/docs/sphinxext/docscrape_sphinx.py new file mode 100644 index 0000000..77ed271 --- /dev/null +++ b/docs/sphinxext/docscrape_sphinx.py @@ -0,0 +1,136 @@ +import re, inspect, textwrap, pydoc +from docscrape import NumpyDocString, FunctionDoc, ClassDoc + +class SphinxDocString(NumpyDocString): + # string conversion routines + def _str_header(self, name, symbol='`'): + return ['.. rubric:: ' + name, ''] + + def _str_field_list(self, name): + return [':' + name + ':'] + + def _str_indent(self, doc, indent=4): + out = [] + for line in doc: + out += [' '*indent + line] + return out + + def _str_signature(self): + return [''] + if self['Signature']: + return ['``%s``' % self['Signature']] + [''] + else: + return [''] + + def _str_summary(self): + return self['Summary'] + [''] + + def _str_extended_summary(self): + return self['Extended Summary'] + [''] + + def _str_param_list(self, name): + out = [] + if self[name]: + out += self._str_field_list(name) + out += [''] + for param,param_type,desc in self[name]: + out += self._str_indent(['**%s** : %s' % (param.strip(), + param_type)]) + out += [''] + out += self._str_indent(desc,8) + out += [''] + return out + + def _str_section(self, name): + out = [] + if self[name]: + out += self._str_header(name) + out += [''] + content = textwrap.dedent("\n".join(self[name])).split("\n") + out += content + out += [''] + return out + + def _str_see_also(self, func_role): + out = [] + if self['See Also']: + see_also = super(SphinxDocString, self)._str_see_also(func_role) + out = ['.. seealso::', ''] + out += self._str_indent(see_also[2:]) + return out + + def _str_warnings(self): + out = [] + if self['Warnings']: + out = ['.. warning::', ''] + out += self._str_indent(self['Warnings']) + return out + + def _str_index(self): + idx = self['index'] + out = [] + if len(idx) == 0: + return out + + out += ['.. index:: %s' % idx.get('default','')] + for section, references in idx.iteritems(): + if section == 'default': + continue + elif section == 'refguide': + out += [' single: %s' % (', '.join(references))] + else: + out += [' %s: %s' % (section, ','.join(references))] + return out + + def _str_references(self): + out = [] + if self['References']: + out += self._str_header('References') + if isinstance(self['References'], str): + self['References'] = [self['References']] + out.extend(self['References']) + out += [''] + return out + + def __str__(self, indent=0, func_role="obj"): + out = [] + out += self._str_signature() + out += self._str_index() + [''] + out += self._str_summary() + out += self._str_extended_summary() + for param_list in ('Parameters', 'Attributes', 'Methods', + 'Returns','Raises'): + out += self._str_param_list(param_list) + out += self._str_warnings() + out += self._str_see_also(func_role) + out += self._str_section('Notes') + out += self._str_references() + out += self._str_section('Examples') + out = self._str_indent(out,indent) + return '\n'.join(out) + +class SphinxFunctionDoc(SphinxDocString, FunctionDoc): + pass + +class SphinxClassDoc(SphinxDocString, ClassDoc): + pass + +def get_doc_object(obj, what=None, doc=None): + if what is None: + if inspect.isclass(obj): + what = 'class' + elif inspect.ismodule(obj): + what = 'module' + elif callable(obj): + what = 'function' + else: + what = 'object' + if what == 'class': + return SphinxClassDoc(obj, '', func_doc=SphinxFunctionDoc, doc=doc) + elif what in ('function', 'method'): + return SphinxFunctionDoc(obj, '', doc=doc) + else: + if doc is None: + doc = pydoc.getdoc(obj) + return SphinxDocString(doc) + diff --git a/docs/sphinxext/inheritance_diagram.py b/docs/sphinxext/inheritance_diagram.py index 213abf8..407fc13 100644 --- a/docs/sphinxext/inheritance_diagram.py +++ b/docs/sphinxext/inheritance_diagram.py @@ -39,11 +39,20 @@ except ImportError: from md5 import md5 from docutils.nodes import Body, Element -from docutils.writers.html4css1 import HTMLTranslator -from sphinx.latexwriter import LaTeXTranslator from docutils.parsers.rst import directives from sphinx.roles import xfileref_role +def my_import(name): + """Module importer - taken from the python documentation. + + This function allows importing names with dots in them.""" + + mod = __import__(name) + components = name.split('.') + for comp in components[1:]: + mod = getattr(mod, comp) + return mod + class DotException(Exception): pass @@ -84,11 +93,15 @@ class InheritanceGraph(object): path = (path and path.rstrip('.')) if not path: path = base - if not path: - raise ValueError( - "Invalid class or module '%s' specified for inheritance diagram" % name) try: module = __import__(path, None, None, []) + # We must do an import of the fully qualified name. Otherwise if a + # subpackage 'a.b' is requested where 'import a' does NOT provide + # 'a.b' automatically, then 'a.b' will not be found below. This + # second call will force the equivalent of 'import a.b' to happen + # after the top-level import above. + my_import(fullname) + except ImportError: raise ValueError( "Could not import class or module '%s' specified for inheritance diagram" % name) @@ -277,12 +290,16 @@ class inheritance_diagram(Body, Element): """ pass -def inheritance_diagram_directive_run(class_names, options, state): +def inheritance_diagram_directive(name, arguments, options, content, lineno, + content_offset, block_text, state, + state_machine): """ Run when the inheritance_diagram directive is first encountered. """ node = inheritance_diagram() + class_names = arguments + # Create a graph starting with the list of classes graph = InheritanceGraph(class_names) @@ -315,15 +332,12 @@ def html_output_graph(self, node): graph_hash = get_graph_hash(node) name = "inheritance%s" % graph_hash - png_path = os.path.join('_static', name + ".png") - - path = '_static' - source = self.document.attributes['source'] - count = source.split('/doc/')[-1].count('/') - for i in range(count): - if os.path.exists(path): break - path = '../'+path - path = '../'+path #specifically added for matplotlib + path = '_images' + dest_path = os.path.join(setup.app.builder.outdir, path) + if not os.path.exists(dest_path): + os.makedirs(dest_path) + png_path = os.path.join(dest_path, name + ".png") + path = setup.app.builder.imgpath # Create a mapping from fully-qualified class names to URLs. urls = {} @@ -349,11 +363,14 @@ def latex_output_graph(self, node): graph_hash = get_graph_hash(node) name = "inheritance%s" % graph_hash - pdf_path = os.path.join('_static', name + ".pdf") + dest_path = os.path.abspath(os.path.join(setup.app.builder.outdir, '_images')) + if not os.path.exists(dest_path): + os.makedirs(dest_path) + pdf_path = os.path.abspath(os.path.join(dest_path, name + ".pdf")) graph.run_dot(['-Tpdf', '-o%s' % pdf_path], name, parts, graph_options={'size': '"6.0,6.0"'}) - return '\\includegraphics{../../%s}' % pdf_path + return '\n\\includegraphics{%s}\n\n' % pdf_path def visit_inheritance_diagram(inner_func): """ @@ -377,47 +394,14 @@ def visit_inheritance_diagram(inner_func): def do_nothing(self, node): pass -options_spec = { - 'parts': directives.nonnegative_int - } - -# Deal with the old and new way of registering directives -try: - from docutils.parsers.rst import Directive -except ImportError: - from docutils.parsers.rst.directives import _directives - def inheritance_diagram_directive(name, arguments, options, content, lineno, - content_offset, block_text, state, - state_machine): - return inheritance_diagram_directive_run(arguments, options, state) - inheritance_diagram_directive.__doc__ = __doc__ - inheritance_diagram_directive.arguments = (1, 100, 0) - inheritance_diagram_directive.options = options_spec - inheritance_diagram_directive.content = 0 - _directives['inheritance-diagram'] = inheritance_diagram_directive -else: - class inheritance_diagram_directive(Directive): - has_content = False - required_arguments = 1 - optional_arguments = 100 - final_argument_whitespace = False - option_spec = options_spec - - def run(self): - return inheritance_diagram_directive_run( - self.arguments, self.options, self.state) - inheritance_diagram_directive.__doc__ = __doc__ - - directives.register_directive('inheritance-diagram', - inheritance_diagram_directive) - def setup(app): - app.add_node(inheritance_diagram) - - HTMLTranslator.visit_inheritance_diagram = \ - visit_inheritance_diagram(html_output_graph) - HTMLTranslator.depart_inheritance_diagram = do_nothing - - LaTeXTranslator.visit_inheritance_diagram = \ - visit_inheritance_diagram(latex_output_graph) - LaTeXTranslator.depart_inheritance_diagram = do_nothing + setup.app = app + setup.confdir = app.confdir + + app.add_node( + inheritance_diagram, + latex=(visit_inheritance_diagram(latex_output_graph), do_nothing), + html=(visit_inheritance_diagram(html_output_graph), do_nothing)) + app.add_directive( + 'inheritance-diagram', inheritance_diagram_directive, + False, (1, 100, 0), parts = directives.nonnegative_int) diff --git a/docs/sphinxext/ipython_console_highlighting.py b/docs/sphinxext/ipython_console_highlighting.py index 4f0104d..00f9abd 100644 --- a/docs/sphinxext/ipython_console_highlighting.py +++ b/docs/sphinxext/ipython_console_highlighting.py @@ -1,18 +1,32 @@ +"""reST directive for syntax-highlighting ipython interactive sessions. +""" + +#----------------------------------------------------------------------------- +# Needed modules + +# Standard library +import re + +# Third party from pygments.lexer import Lexer, do_insertions -from pygments.lexers.agile import PythonConsoleLexer, PythonLexer, \ - PythonTracebackLexer +from pygments.lexers.agile import (PythonConsoleLexer, PythonLexer, + PythonTracebackLexer) from pygments.token import Comment, Generic + from sphinx import highlighting -import re + +#----------------------------------------------------------------------------- +# Global constants line_re = re.compile('.*?\n') +#----------------------------------------------------------------------------- +# Code begins - classes and functions + class IPythonConsoleLexer(Lexer): """ For IPython console output or doctests, such as: - Tracebacks are not currently supported. - .. sourcecode:: ipython In [1]: a = 'foo' @@ -24,7 +38,14 @@ class IPythonConsoleLexer(Lexer): foo In [4]: 1 / 0 + + Notes: + + - Tracebacks are not currently supported. + + - It assumes the default IPython prompts, not customized ones. """ + name = 'IPython console session' aliases = ['ipython'] mimetypes = ['text/x-ipython-console'] @@ -72,4 +93,6 @@ class IPythonConsoleLexer(Lexer): pylexer.get_tokens_unprocessed(curcode)): yield item +#----------------------------------------------------------------------------- +# Register the extension as a valid pygments lexer highlighting.lexers['ipython'] = IPythonConsoleLexer() diff --git a/docs/sphinxext/numpydoc.py b/docs/sphinxext/numpydoc.py new file mode 100644 index 0000000..ff6c44c --- /dev/null +++ b/docs/sphinxext/numpydoc.py @@ -0,0 +1,116 @@ +""" +======== +numpydoc +======== + +Sphinx extension that handles docstrings in the Numpy standard format. [1] + +It will: + +- Convert Parameters etc. sections to field lists. +- Convert See Also section to a See also entry. +- Renumber references. +- Extract the signature from the docstring, if it can't be determined otherwise. + +.. [1] http://projects.scipy.org/scipy/numpy/wiki/CodingStyleGuidelines#docstring-standard + +""" + +import os, re, pydoc +from docscrape_sphinx import get_doc_object, SphinxDocString +import inspect + +def mangle_docstrings(app, what, name, obj, options, lines, + reference_offset=[0]): + if what == 'module': + # Strip top title + title_re = re.compile(r'^\s*[#*=]{4,}\n[a-z0-9 -]+\n[#*=]{4,}\s*', + re.I|re.S) + lines[:] = title_re.sub('', "\n".join(lines)).split("\n") + else: + doc = get_doc_object(obj, what, "\n".join(lines)) + lines[:] = str(doc).split("\n") + + if app.config.numpydoc_edit_link and hasattr(obj, '__name__') and \ + obj.__name__: + if hasattr(obj, '__module__'): + v = dict(full_name="%s.%s" % (obj.__module__, obj.__name__)) + else: + v = dict(full_name=obj.__name__) + lines += ['', '.. htmlonly::', ''] + lines += [' %s' % x for x in + (app.config.numpydoc_edit_link % v).split("\n")] + + # replace reference numbers so that there are no duplicates + references = [] + for l in lines: + l = l.strip() + if l.startswith('.. ['): + try: + references.append(int(l[len('.. ['):l.index(']')])) + except ValueError: + print "WARNING: invalid reference in %s docstring" % name + + # Start renaming from the biggest number, otherwise we may + # overwrite references. + references.sort() + if references: + for i, line in enumerate(lines): + for r in references: + new_r = reference_offset[0] + r + lines[i] = lines[i].replace('[%d]_' % r, + '[%d]_' % new_r) + lines[i] = lines[i].replace('.. [%d]' % r, + '.. [%d]' % new_r) + + reference_offset[0] += len(references) + +def mangle_signature(app, what, name, obj, options, sig, retann): + # Do not try to inspect classes that don't define `__init__` + if (inspect.isclass(obj) and + 'initializes x; see ' in pydoc.getdoc(obj.__init__)): + return '', '' + + if not (callable(obj) or hasattr(obj, '__argspec_is_invalid_')): return + if not hasattr(obj, '__doc__'): return + + doc = SphinxDocString(pydoc.getdoc(obj)) + if doc['Signature']: + sig = re.sub("^[^(]*", "", doc['Signature']) + return sig, '' + +def initialize(app): + try: + app.connect('autodoc-process-signature', mangle_signature) + except: + monkeypatch_sphinx_ext_autodoc() + +def setup(app, get_doc_object_=get_doc_object): + global get_doc_object + get_doc_object = get_doc_object_ + + app.connect('autodoc-process-docstring', mangle_docstrings) + app.connect('builder-inited', initialize) + app.add_config_value('numpydoc_edit_link', None, True) + +#------------------------------------------------------------------------------ +# Monkeypatch sphinx.ext.autodoc to accept argspecless autodocs (Sphinx < 0.5) +#------------------------------------------------------------------------------ + +def monkeypatch_sphinx_ext_autodoc(): + global _original_format_signature + import sphinx.ext.autodoc + + if sphinx.ext.autodoc.format_signature is our_format_signature: + return + + print "[numpydoc] Monkeypatching sphinx.ext.autodoc ..." + _original_format_signature = sphinx.ext.autodoc.format_signature + sphinx.ext.autodoc.format_signature = our_format_signature + +def our_format_signature(what, obj): + r = mangle_signature(None, what, None, obj, None, None, None) + if r is not None: + return r[0] + else: + return _original_format_signature(what, obj)