summaryrefslogtreecommitdiff
path: root/doc/summarize.py
diff options
context:
space:
mode:
authorPauli Virtanen <pav@iki.fi>2008-11-23 10:39:05 +0000
committerPauli Virtanen <pav@iki.fi>2008-11-23 10:39:05 +0000
commit03582a3dbd1b4643b7b70cf277eada66dcb0800e (patch)
tree1cc0fa73843d5e602a561696817f41c4abfb811b /doc/summarize.py
parent638bacdd9212dd2258a886e0124cca56bf2b905d (diff)
parent84054e34dd58ceebc981d349d997e4dd7cd7c80c (diff)
downloadnumpy-03582a3dbd1b4643b7b70cf277eada66dcb0800e.tar.gz
Moved numpy-docs under doc/ in the main Numpy trunk.
Diffstat (limited to 'doc/summarize.py')
-rwxr-xr-xdoc/summarize.py167
1 files changed, 167 insertions, 0 deletions
diff --git a/doc/summarize.py b/doc/summarize.py
new file mode 100755
index 000000000..87f4c0725
--- /dev/null
+++ b/doc/summarize.py
@@ -0,0 +1,167 @@
+#!/usr/bin/env python
+"""
+summarize.py
+
+Show a summary about which Numpy functions are documented and which are not.
+
+"""
+
+import os, glob, re, sys, inspect, optparse
+sys.path.append(os.path.join(os.path.dirname(__file__), 'ext'))
+from ext.phantom_import import import_phantom_module
+
+from ext.autosummary_generate import get_documented
+
+CUR_DIR = os.path.dirname(__file__)
+SOURCE_DIR = os.path.join(CUR_DIR, 'source', 'reference')
+
+SKIP_LIST = """
+# --- aliases:
+alltrue sometrue bitwise_not cumproduct
+row_stack column_stack product rank
+
+# -- skipped:
+core lib f2py dual doc emath ma rec char distutils oldnumeric numarray
+testing version matlib
+
+add_docstring add_newdoc add_newdocs fastCopyAndTranspose pkgload
+conjugate disp
+
+int0 object0 unicode0 uint0 string_ string0 void0
+
+flagsobj
+
+setup setupscons PackageLoader
+
+lib.scimath.arccos lib.scimath.arcsin lib.scimath.arccosh lib.scimath.arcsinh
+lib.scimath.arctanh lib.scimath.log lib.scimath.log2 lib.scimath.log10
+lib.scimath.logn lib.scimath.power lib.scimath.sqrt
+
+# --- numpy.random:
+random random.info random.mtrand random.ranf random.sample random.random
+
+# --- numpy.fft:
+fft fft.Tester fft.bench fft.fftpack fft.fftpack_lite fft.helper
+fft.refft fft.refft2 fft.refftn fft.irefft fft.irefft2 fft.irefftn
+fft.info fft.test
+
+# --- numpy.linalg:
+linalg linalg.Tester
+linalg.bench linalg.info linalg.lapack_lite linalg.linalg linalg.test
+
+# --- numpy.ctypeslib:
+ctypeslib ctypeslib.test
+
+""".split()
+
+def main():
+ p = optparse.OptionParser(__doc__)
+ options, args = p.parse_args()
+
+ if len(args) != 0:
+ p.error('Wrong number of arguments')
+
+ # prepare
+ fn = os.path.join(CUR_DIR, 'dump.xml')
+ if os.path.isfile(fn):
+ import_phantom_module(fn)
+
+ # check
+ documented, undocumented = check_numpy()
+
+ # report
+ in_sections = {}
+ for name, locations in documented.iteritems():
+ for (filename, section, keyword, toctree) in locations:
+ in_sections.setdefault((filename, section, keyword), []).append(name)
+
+ print "Documented"
+ print "==========\n"
+
+ last_filename = None
+ for (filename, section, keyword), names in sorted(in_sections.items()):
+ if filename != last_filename:
+ print "--- %s\n" % filename
+ last_filename = filename
+ print " ** ", section
+ print format_in_columns(sorted(names))
+ print "\n"
+
+ print ""
+ print "Undocumented"
+ print "============\n"
+ print format_in_columns(sorted(undocumented.keys()))
+
+def check_numpy():
+ documented = get_documented(glob.glob(SOURCE_DIR + '/*.rst'))
+ undocumented = {}
+
+ import numpy, numpy.fft, numpy.linalg, numpy.random
+ for mod in [numpy, numpy.fft, numpy.linalg, numpy.random,
+ numpy.ctypeslib, numpy.emath, numpy.ma]:
+ undocumented.update(get_undocumented(documented, mod, skip=SKIP_LIST))
+
+ for d in (documented, undocumented):
+ for k in d.keys():
+ if k.startswith('numpy.'):
+ d[k[6:]] = d[k]
+ del d[k]
+
+ return documented, undocumented
+
+def get_undocumented(documented, module, module_name=None, skip=[]):
+ """
+ Find out which items in Numpy are not documented.
+
+ Returns
+ -------
+ undocumented : dict of bool
+ Dictionary containing True for each documented item name
+ and False for each undocumented one.
+
+ """
+ undocumented = {}
+
+ if module_name is None:
+ module_name = module.__name__
+
+ for name in dir(module):
+ obj = getattr(module, name)
+ if name.startswith('_'): continue
+
+ full_name = '.'.join([module_name, name])
+
+ if full_name in skip: continue
+ if full_name.startswith('numpy.') and full_name[6:] in skip: continue
+ if not (inspect.ismodule(obj) or callable(obj) or inspect.isclass(obj)):
+ continue
+
+ if full_name not in documented:
+ undocumented[full_name] = True
+
+ return undocumented
+
+def format_in_columns(lst):
+ """
+ Format a list containing strings to a string containing the items
+ in columns.
+ """
+ lst = map(str, lst)
+ col_len = max(map(len, lst)) + 2
+ ncols = 80//col_len
+ if ncols == 0:
+ ncols = 1
+
+ if len(lst) % ncols == 0:
+ nrows = len(lst)//ncols
+ else:
+ nrows = 1 + len(lst)//ncols
+
+ fmt = ' %%-%ds ' % (col_len-2)
+
+ lines = []
+ for n in range(nrows):
+ lines.append("".join([fmt % x for x in lst[n::nrows]]))
+ return "\n".join(lines)
+
+if __name__ == "__main__": main()