numpy 1.9.2__zip → 1.10.0__zip
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- numpy-1.10.0.post2/INSTALL.txt +200 -0
- numpy-1.10.0.post2/LICENSE.txt +30 -0
- numpy-1.10.0.post2/MANIFEST.in +31 -0
- numpy-1.10.0.post2/PKG-INFO +47 -0
- numpy-1.10.0.post2/cnew.txt +117 -0
- numpy-1.10.0.post2/cold.txt +44 -0
- numpy-1.10.0.post2/committers.txt +160 -0
- numpy-1.10.0.post2/cpre.txt +283 -0
- numpy-1.10.0.post2/crel.txt +161 -0
- numpy-1.10.0.post2/doc/release/1.10.0-notes.rst +439 -0
- numpy-1.10.0.post2/doc/scipy-sphinx-theme/.git +1 -0
- numpy-1.10.0.post2/doc/source/conf.py +331 -0
- numpy-1.10.0.post2/doc/source/dev/development_environment.rst +211 -0
- numpy-1.10.0.post2/doc/source/dev/gitwash/development_workflow.rst +534 -0
- numpy-1.10.0.post2/doc/source/dev/gitwash/git_links.inc +95 -0
- numpy-1.10.0.post2/doc/source/dev/gitwash/index.rst +14 -0
- numpy-1.10.0.post2/doc/source/dev/index.rst +11 -0
- numpy-1.10.0.post2/doc/source/reference/arrays.classes.rst +490 -0
- numpy-1.10.0.post2/doc/source/reference/arrays.dtypes.rst +536 -0
- numpy-1.10.0.post2/doc/source/reference/arrays.indexing.rst +549 -0
- numpy-1.10.0.post2/doc/source/reference/arrays.interface.rst +337 -0
- numpy-1.10.0.post2/doc/source/reference/arrays.ndarray.rst +622 -0
- numpy-1.10.0.post2/doc/source/reference/arrays.scalars.rst +291 -0
- numpy-1.10.0.post2/doc/source/reference/c-api.array.rst +3393 -0
- numpy-1.10.0.post2/doc/source/reference/c-api.config.rst +103 -0
- numpy-1.10.0.post2/doc/source/reference/c-api.coremath.rst +420 -0
- numpy-1.10.0.post2/doc/source/reference/c-api.dtype.rst +376 -0
- numpy-1.10.0.post2/doc/source/reference/c-api.generalized-ufuncs.rst +191 -0
- numpy-1.10.0.post2/doc/source/reference/c-api.iterator.rst +1300 -0
- numpy-1.10.0.post2/doc/source/reference/c-api.types-and-structures.rst +1240 -0
- numpy-1.10.0.post2/doc/source/reference/c-api.ufunc.rst +413 -0
- numpy-1.10.0.post2/doc/source/reference/index.rst +43 -0
- numpy-1.10.0.post2/doc/source/reference/internals.code-explanations.rst +615 -0
- numpy-1.10.0.post2/doc/source/reference/routines.array-manipulation.rst +115 -0
- numpy-1.10.0.post2/doc/source/reference/routines.io.rst +78 -0
- numpy-1.10.0.post2/doc/source/reference/routines.linalg.rst +91 -0
- numpy-1.10.0.post2/doc/source/reference/routines.ma.rst +407 -0
- numpy-1.10.0.post2/doc/source/reference/routines.sort.rst +41 -0
- numpy-1.10.0.post2/doc/source/reference/routines.statistics.rst +57 -0
- numpy-1.10.0.post2/doc/source/reference/swig.interface-file.rst +1066 -0
- numpy-1.10.0.post2/doc/source/reference/swig.testing.rst +167 -0
- numpy-1.10.0.post2/doc/source/reference/ufuncs.rst +666 -0
- numpy-1.10.0.post2/doc/source/release.rst +20 -0
- numpy-1.10.0.post2/doc/source/user/basics.io.genfromtxt.rst +531 -0
- numpy-1.10.0.post2/doc/source/user/basics.rec.rst +7 -0
- numpy-1.10.0.post2/doc/source/user/c-info.beyond-basics.rst +560 -0
- numpy-1.10.0.post2/doc/source/user/c-info.how-to-extend.rst +642 -0
- numpy-1.10.0.post2/doc/source/user/c-info.python-as-glue.rst +1177 -0
- numpy-1.10.0.post2/doc/source/user/c-info.ufunc-tutorial.rst +1211 -0
- numpy-1.10.0.post2/doc/source/user/install.rst +194 -0
- numpy-1.10.0.post2/doc/sphinxext/.git +1 -0
- numpy-1.10.0.post2/numpy/__init__.py +227 -0
- numpy-1.10.0.post2/numpy/_build_utils/README +8 -0
- numpy-1.10.0.post2/numpy/_build_utils/apple_accelerate.py +21 -0
- numpy-1.10.0.post2/numpy/_build_utils/common.py +138 -0
- numpy-1.10.0.post2/numpy/_build_utils/src/apple_sgemv_fix.c +227 -0
- numpy-1.10.0.post2/numpy/_build_utils/waf.py +531 -0
- numpy-1.10.0.post2/numpy/_import_tools.py +353 -0
- numpy-1.10.0.post2/numpy/add_newdocs.py +7611 -0
- numpy-1.10.0.post2/numpy/compat/_inspect.py +194 -0
- numpy-1.10.0.post2/numpy/compat/py3k.py +88 -0
- numpy-1.10.0.post2/numpy/compat/setup.py +12 -0
- numpy-1.10.0.post2/numpy/core/__init__.py +89 -0
- numpy-1.10.0.post2/numpy/core/_internal.py +761 -0
- numpy-1.10.0.post2/numpy/core/_methods.py +133 -0
- numpy-1.10.0.post2/numpy/core/arrayprint.py +760 -0
- numpy-1.10.0.post2/numpy/core/code_generators/cversions.txt +34 -0
- numpy-1.10.0.post2/numpy/core/code_generators/generate_ufunc_api.py +219 -0
- numpy-1.10.0.post2/numpy/core/code_generators/generate_umath.py +1017 -0
- numpy-1.10.0.post2/numpy/core/code_generators/numpy_api.py +415 -0
- numpy-1.10.0.post2/numpy/core/code_generators/ufunc_docstrings.py +3442 -0
- numpy-1.10.0.post2/numpy/core/defchararray.py +2689 -0
- numpy-1.10.0.post2/numpy/core/fromnumeric.py +3089 -0
- numpy-1.10.0.post2/numpy/core/function_base.py +203 -0
- numpy-1.10.0.post2/numpy/core/getlimits.py +308 -0
- numpy-1.10.0.post2/numpy/core/include/numpy/ndarrayobject.h +246 -0
- numpy-1.10.0.post2/numpy/core/include/numpy/ndarraytypes.h +1797 -0
- numpy-1.10.0.post2/numpy/core/include/numpy/npy_3kcompat.h +448 -0
- numpy-1.10.0.post2/numpy/core/include/numpy/npy_common.h +1051 -0
- numpy-1.10.0.post2/numpy/core/include/numpy/npy_cpu.h +92 -0
- numpy-1.10.0.post2/numpy/core/include/numpy/npy_endian.h +61 -0
- numpy-1.10.0.post2/numpy/core/include/numpy/npy_math.h +525 -0
- numpy-1.10.0.post2/numpy/core/include/numpy/numpyconfig.h +36 -0
- numpy-1.10.0.post2/numpy/core/machar.py +342 -0
- numpy-1.10.0.post2/numpy/core/memmap.py +311 -0
- numpy-1.10.0.post2/numpy/core/numeric.py +2893 -0
- numpy-1.10.0.post2/numpy/core/numerictypes.py +1036 -0
- numpy-1.10.0.post2/numpy/core/records.py +846 -0
- numpy-1.10.0.post2/numpy/core/setup.py +983 -0
- numpy-1.10.0.post2/numpy/core/setup_common.py +352 -0
- numpy-1.10.0.post2/numpy/core/shape_base.py +350 -0
- numpy-1.10.0.post2/numpy/core/src/multiarray/alloc.c +244 -0
- numpy-1.10.0.post2/numpy/core/src/multiarray/arrayobject.c +1858 -0
- numpy-1.10.0.post2/numpy/core/src/multiarray/arraytypes.c.src +4738 -0
- numpy-1.10.0.post2/numpy/core/src/multiarray/arraytypes.h +37 -0
- numpy-1.10.0.post2/numpy/core/src/multiarray/buffer.c +981 -0
- numpy-1.10.0.post2/numpy/core/src/multiarray/calculation.c +1224 -0
- numpy-1.10.0.post2/numpy/core/src/multiarray/cblasfuncs.c +812 -0
- numpy-1.10.0.post2/numpy/core/src/multiarray/cblasfuncs.h +10 -0
- numpy-1.10.0.post2/numpy/core/src/multiarray/common.c +911 -0
- numpy-1.10.0.post2/numpy/core/src/multiarray/common.h +250 -0
- numpy-1.10.0.post2/numpy/core/src/multiarray/compiled_base.c +1664 -0
- numpy-1.10.0.post2/numpy/core/src/multiarray/compiled_base.h +24 -0
- numpy-1.10.0.post2/numpy/core/src/multiarray/conversion_utils.c +1217 -0
- numpy-1.10.0.post2/numpy/core/src/multiarray/convert.c +590 -0
- numpy-1.10.0.post2/numpy/core/src/multiarray/convert_datatype.c +2155 -0
- numpy-1.10.0.post2/numpy/core/src/multiarray/ctors.c +3838 -0
- numpy-1.10.0.post2/numpy/core/src/multiarray/datetime.c +3821 -0
- numpy-1.10.0.post2/numpy/core/src/multiarray/datetime_busday.c +1322 -0
- numpy-1.10.0.post2/numpy/core/src/multiarray/datetime_busdaycal.c +552 -0
- numpy-1.10.0.post2/numpy/core/src/multiarray/datetime_strings.c +1772 -0
- numpy-1.10.0.post2/numpy/core/src/multiarray/descriptor.c +3719 -0
- numpy-1.10.0.post2/numpy/core/src/multiarray/dtype_transfer.c +4239 -0
- numpy-1.10.0.post2/numpy/core/src/multiarray/einsum.c.src +3005 -0
- numpy-1.10.0.post2/numpy/core/src/multiarray/getset.c +986 -0
- numpy-1.10.0.post2/numpy/core/src/multiarray/hashdescr.c +318 -0
- numpy-1.10.0.post2/numpy/core/src/multiarray/item_selection.c +2413 -0
- numpy-1.10.0.post2/numpy/core/src/multiarray/iterators.c +2192 -0
- numpy-1.10.0.post2/numpy/core/src/multiarray/lowlevel_strided_loops.c.src +1769 -0
- numpy-1.10.0.post2/numpy/core/src/multiarray/mapping.c +3380 -0
- numpy-1.10.0.post2/numpy/core/src/multiarray/mapping.h +77 -0
- numpy-1.10.0.post2/numpy/core/src/multiarray/methods.c +2514 -0
- numpy-1.10.0.post2/numpy/core/src/multiarray/multiarray_tests.c.src +1035 -0
- numpy-1.10.0.post2/numpy/core/src/multiarray/multiarraymodule.c +4628 -0
- numpy-1.10.0.post2/numpy/core/src/multiarray/multiarraymodule.h +15 -0
- numpy-1.10.0.post2/numpy/core/src/multiarray/nditer_api.c +2809 -0
- numpy-1.10.0.post2/numpy/core/src/multiarray/nditer_constr.c +3160 -0
- numpy-1.10.0.post2/numpy/core/src/multiarray/nditer_pywrap.c +2499 -0
- numpy-1.10.0.post2/numpy/core/src/multiarray/number.c +1106 -0
- numpy-1.10.0.post2/numpy/core/src/multiarray/number.h +77 -0
- numpy-1.10.0.post2/numpy/core/src/multiarray/numpymemoryview.c +308 -0
- numpy-1.10.0.post2/numpy/core/src/multiarray/numpyos.c +683 -0
- numpy-1.10.0.post2/numpy/core/src/multiarray/scalarapi.c +870 -0
- numpy-1.10.0.post2/numpy/core/src/multiarray/scalartypes.c.src +4343 -0
- numpy-1.10.0.post2/numpy/core/src/multiarray/scalartypes.h +55 -0
- numpy-1.10.0.post2/numpy/core/src/multiarray/shape.c +1131 -0
- numpy-1.10.0.post2/numpy/core/src/multiarray/ucsnarrow.c +174 -0
- numpy-1.10.0.post2/numpy/core/src/multiarray/vdot.c +180 -0
- numpy-1.10.0.post2/numpy/core/src/multiarray/vdot.h +18 -0
- numpy-1.10.0.post2/numpy/core/src/npymath/ieee754.c.src +808 -0
- numpy-1.10.0.post2/numpy/core/src/npymath/npy_math.c.src +597 -0
- numpy-1.10.0.post2/numpy/core/src/npymath/npy_math_complex.c.src +1788 -0
- numpy-1.10.0.post2/numpy/core/src/npymath/npy_math_private.h +544 -0
- numpy-1.10.0.post2/numpy/core/src/npysort/heapsort.c.src +402 -0
- numpy-1.10.0.post2/numpy/core/src/npysort/mergesort.c.src +488 -0
- numpy-1.10.0.post2/numpy/core/src/npysort/npysort_common.h +360 -0
- numpy-1.10.0.post2/numpy/core/src/npysort/quicksort.c.src +523 -0
- numpy-1.10.0.post2/numpy/core/src/npysort/selection.c.src +426 -0
- numpy-1.10.0.post2/numpy/core/src/private/npy_cblas.h +584 -0
- numpy-1.10.0.post2/numpy/core/src/private/npy_config.h +101 -0
- numpy-1.10.0.post2/numpy/core/src/private/npy_import.h +32 -0
- numpy-1.10.0.post2/numpy/core/src/private/npy_partition.h.src +122 -0
- numpy-1.10.0.post2/numpy/core/src/private/npy_sort.h +196 -0
- numpy-1.10.0.post2/numpy/core/src/private/templ_common.h.src +43 -0
- numpy-1.10.0.post2/numpy/core/src/private/ufunc_override.h +397 -0
- numpy-1.10.0.post2/numpy/core/src/umath/funcs.inc.src +356 -0
- numpy-1.10.0.post2/numpy/core/src/umath/loops.c.src +2675 -0
- numpy-1.10.0.post2/numpy/core/src/umath/loops.h.src +497 -0
- numpy-1.10.0.post2/numpy/core/src/umath/operand_flag_tests.c.src +105 -0
- numpy-1.10.0.post2/numpy/core/src/umath/scalarmath.c.src +1738 -0
- numpy-1.10.0.post2/numpy/core/src/umath/simd.inc.src +903 -0
- numpy-1.10.0.post2/numpy/core/src/umath/test_rational.c.src +1404 -0
- numpy-1.10.0.post2/numpy/core/src/umath/ufunc_object.c +5703 -0
- numpy-1.10.0.post2/numpy/core/src/umath/ufunc_type_resolution.c +2159 -0
- numpy-1.10.0.post2/numpy/core/src/umath/umath_tests.c.src +392 -0
- numpy-1.10.0.post2/numpy/core/src/umath/umathmodule.c +443 -0
- numpy-1.10.0.post2/numpy/core/tests/test_abc.py +47 -0
- numpy-1.10.0.post2/numpy/core/tests/test_api.py +515 -0
- numpy-1.10.0.post2/numpy/core/tests/test_arrayprint.py +171 -0
- numpy-1.10.0.post2/numpy/core/tests/test_datetime.py +1820 -0
- numpy-1.10.0.post2/numpy/core/tests/test_defchararray.py +703 -0
- numpy-1.10.0.post2/numpy/core/tests/test_deprecations.py +619 -0
- numpy-1.10.0.post2/numpy/core/tests/test_dtype.py +578 -0
- numpy-1.10.0.post2/numpy/core/tests/test_einsum.py +627 -0
- numpy-1.10.0.post2/numpy/core/tests/test_errstate.py +52 -0
- numpy-1.10.0.post2/numpy/core/tests/test_function_base.py +142 -0
- numpy-1.10.0.post2/numpy/core/tests/test_getlimits.py +77 -0
- numpy-1.10.0.post2/numpy/core/tests/test_half.py +436 -0
- numpy-1.10.0.post2/numpy/core/tests/test_indexerrors.py +126 -0
- numpy-1.10.0.post2/numpy/core/tests/test_indexing.py +1047 -0
- numpy-1.10.0.post2/numpy/core/tests/test_item_selection.py +73 -0
- numpy-1.10.0.post2/numpy/core/tests/test_machar.py +29 -0
- numpy-1.10.0.post2/numpy/core/tests/test_memmap.py +130 -0
- numpy-1.10.0.post2/numpy/core/tests/test_multiarray.py +5924 -0
- numpy-1.10.0.post2/numpy/core/tests/test_multiarray_assignment.py +84 -0
- numpy-1.10.0.post2/numpy/core/tests/test_nditer.py +2638 -0
- numpy-1.10.0.post2/numpy/core/tests/test_numeric.py +2204 -0
- numpy-1.10.0.post2/numpy/core/tests/test_numerictypes.py +382 -0
- numpy-1.10.0.post2/numpy/core/tests/test_print.py +248 -0
- numpy-1.10.0.post2/numpy/core/tests/test_records.py +299 -0
- numpy-1.10.0.post2/numpy/core/tests/test_regression.py +2177 -0
- numpy-1.10.0.post2/numpy/core/tests/test_scalarinherit.py +41 -0
- numpy-1.10.0.post2/numpy/core/tests/test_scalarmath.py +316 -0
- numpy-1.10.0.post2/numpy/core/tests/test_shape_base.py +319 -0
- numpy-1.10.0.post2/numpy/core/tests/test_ufunc.py +1227 -0
- numpy-1.10.0.post2/numpy/core/tests/test_umath.py +1933 -0
- numpy-1.10.0.post2/numpy/core/tests/test_umath_complex.py +538 -0
- numpy-1.10.0.post2/numpy/core/tests/test_unicode.py +360 -0
- numpy-1.10.0.post2/numpy/distutils/__init__.py +23 -0
- numpy-1.10.0.post2/numpy/distutils/ccompiler.py +690 -0
- numpy-1.10.0.post2/numpy/distutils/command/autodist.py +94 -0
- numpy-1.10.0.post2/numpy/distutils/command/build.py +47 -0
- numpy-1.10.0.post2/numpy/distutils/command/build_clib.py +295 -0
- numpy-1.10.0.post2/numpy/distutils/command/build_ext.py +522 -0
- numpy-1.10.0.post2/numpy/distutils/command/config.py +437 -0
- numpy-1.10.0.post2/numpy/distutils/exec_command.py +651 -0
- numpy-1.10.0.post2/numpy/distutils/fcompiler/compaq.py +128 -0
- numpy-1.10.0.post2/numpy/distutils/fcompiler/gnu.py +403 -0
- numpy-1.10.0.post2/numpy/distutils/fcompiler/intel.py +217 -0
- numpy-1.10.0.post2/numpy/distutils/fcompiler/pg.py +63 -0
- numpy-1.10.0.post2/numpy/distutils/fcompiler/sun.py +55 -0
- numpy-1.10.0.post2/numpy/distutils/intelccompiler.py +95 -0
- numpy-1.10.0.post2/numpy/distutils/lib2def.py +116 -0
- numpy-1.10.0.post2/numpy/distutils/mingw32ccompiler.py +599 -0
- numpy-1.10.0.post2/numpy/distutils/misc_util.py +2306 -0
- numpy-1.10.0.post2/numpy/distutils/msvc9compiler.py +23 -0
- numpy-1.10.0.post2/numpy/distutils/msvccompiler.py +17 -0
- numpy-1.10.0.post2/numpy/distutils/npy_pkg_config.py +451 -0
- numpy-1.10.0.post2/numpy/distutils/system_info.py +2397 -0
- numpy-1.10.0.post2/numpy/distutils/tests/f2py_ext/tests/test_fib2.py +12 -0
- numpy-1.10.0.post2/numpy/distutils/tests/f2py_f90_ext/tests/test_foo.py +11 -0
- numpy-1.10.0.post2/numpy/distutils/tests/gen_ext/tests/test_fib3.py +11 -0
- numpy-1.10.0.post2/numpy/distutils/tests/pyrex_ext/tests/test_primes.py +13 -0
- numpy-1.10.0.post2/numpy/distutils/tests/swig_ext/__init__.py +1 -0
- numpy-1.10.0.post2/numpy/distutils/tests/swig_ext/tests/test_example.py +17 -0
- numpy-1.10.0.post2/numpy/distutils/tests/swig_ext/tests/test_example2.py +15 -0
- numpy-1.10.0.post2/numpy/distutils/tests/test_fcompiler_gnu.py +60 -0
- numpy-1.10.0.post2/numpy/distutils/tests/test_fcompiler_intel.py +36 -0
- numpy-1.10.0.post2/numpy/distutils/tests/test_misc_util.py +79 -0
- numpy-1.10.0.post2/numpy/distutils/tests/test_npy_pkg_config.py +102 -0
- numpy-1.10.0.post2/numpy/distutils/tests/test_system_info.py +209 -0
- numpy-1.10.0.post2/numpy/distutils/unixccompiler.py +125 -0
- numpy-1.10.0.post2/numpy/doc/byteswapping.py +156 -0
- numpy-1.10.0.post2/numpy/doc/creation.py +144 -0
- numpy-1.10.0.post2/numpy/doc/glossary.py +423 -0
- numpy-1.10.0.post2/numpy/doc/indexing.py +439 -0
- numpy-1.10.0.post2/numpy/doc/structured_arrays.py +290 -0
- numpy-1.10.0.post2/numpy/f2py/__init__.py +49 -0
- numpy-1.10.0.post2/numpy/f2py/__main__.py +25 -0
- numpy-1.10.0.post2/numpy/f2py/auxfuncs.py +858 -0
- numpy-1.10.0.post2/numpy/f2py/capi_maps.py +851 -0
- numpy-1.10.0.post2/numpy/f2py/cb_rules.py +554 -0
- numpy-1.10.0.post2/numpy/f2py/cfuncs.py +1261 -0
- numpy-1.10.0.post2/numpy/f2py/common_rules.py +150 -0
- numpy-1.10.0.post2/numpy/f2py/crackfortran.py +3314 -0
- numpy-1.10.0.post2/numpy/f2py/diagnose.py +156 -0
- numpy-1.10.0.post2/numpy/f2py/f2py2e.py +656 -0
- numpy-1.10.0.post2/numpy/f2py/f2py_testing.py +48 -0
- numpy-1.10.0.post2/numpy/f2py/f90mod_rules.py +272 -0
- numpy-1.10.0.post2/numpy/f2py/func2subr.py +299 -0
- numpy-1.10.0.post2/numpy/f2py/rules.py +1475 -0
- numpy-1.10.0.post2/numpy/f2py/setup.py +117 -0
- numpy-1.10.0.post2/numpy/f2py/src/fortranobject.c +1037 -0
- numpy-1.10.0.post2/numpy/f2py/src/fortranobject.h +162 -0
- numpy-1.10.0.post2/numpy/f2py/tests/src/array_from_pyobj/wrapmodule.c +223 -0
- numpy-1.10.0.post2/numpy/f2py/tests/test_array_from_pyobj.py +593 -0
- numpy-1.10.0.post2/numpy/f2py/tests/test_assumed_shape.py +35 -0
- numpy-1.10.0.post2/numpy/f2py/tests/test_callback.py +136 -0
- numpy-1.10.0.post2/numpy/f2py/tests/test_kind.py +36 -0
- numpy-1.10.0.post2/numpy/f2py/tests/test_mixed.py +40 -0
- numpy-1.10.0.post2/numpy/f2py/tests/test_regression.py +34 -0
- numpy-1.10.0.post2/numpy/f2py/tests/test_return_character.py +148 -0
- numpy-1.10.0.post2/numpy/f2py/tests/test_return_complex.py +170 -0
- numpy-1.10.0.post2/numpy/f2py/tests/test_return_integer.py +180 -0
- numpy-1.10.0.post2/numpy/f2py/tests/test_return_logical.py +189 -0
- numpy-1.10.0.post2/numpy/f2py/tests/test_return_real.py +206 -0
- numpy-1.10.0.post2/numpy/f2py/tests/test_size.py +44 -0
- numpy-1.10.0.post2/numpy/f2py/tests/util.py +367 -0
- numpy-1.10.0.post2/numpy/f2py/use_rules.py +115 -0
- numpy-1.10.0.post2/numpy/fft/fftpack.c +1501 -0
- numpy-1.10.0.post2/numpy/fft/fftpack.h +28 -0
- numpy-1.10.0.post2/numpy/fft/fftpack.py +1241 -0
- numpy-1.10.0.post2/numpy/fft/fftpack_litemodule.c +363 -0
- numpy-1.10.0.post2/numpy/fft/info.py +187 -0
- numpy-1.10.0.post2/numpy/fft/setup.py +19 -0
- numpy-1.10.0.post2/numpy/fft/tests/test_fftpack.py +166 -0
- numpy-1.10.0.post2/numpy/fft/tests/test_helper.py +78 -0
- numpy-1.10.0.post2/numpy/lib/_iotools.py +917 -0
- numpy-1.10.0.post2/numpy/lib/arraypad.py +1497 -0
- numpy-1.10.0.post2/numpy/lib/arraysetops.py +480 -0
- numpy-1.10.0.post2/numpy/lib/arrayterator.py +226 -0
- numpy-1.10.0.post2/numpy/lib/financial.py +737 -0
- numpy-1.10.0.post2/numpy/lib/format.py +814 -0
- numpy-1.10.0.post2/numpy/lib/function_base.py +4150 -0
- numpy-1.10.0.post2/numpy/lib/index_tricks.py +874 -0
- numpy-1.10.0.post2/numpy/lib/info.py +152 -0
- numpy-1.10.0.post2/numpy/lib/nanfunctions.py +1237 -0
- numpy-1.10.0.post2/numpy/lib/npyio.py +1992 -0
- numpy-1.10.0.post2/numpy/lib/polynomial.py +1277 -0
- numpy-1.10.0.post2/numpy/lib/recfunctions.py +1003 -0
- numpy-1.10.0.post2/numpy/lib/setup.py +12 -0
- numpy-1.10.0.post2/numpy/lib/shape_base.py +872 -0
- numpy-1.10.0.post2/numpy/lib/stride_tricks.py +200 -0
- numpy-1.10.0.post2/numpy/lib/tests/data/py2-objarr.npy +0 -0
- numpy-1.10.0.post2/numpy/lib/tests/data/py2-objarr.npz +0 -0
- numpy-1.10.0.post2/numpy/lib/tests/data/py3-objarr.npy +0 -0
- numpy-1.10.0.post2/numpy/lib/tests/data/py3-objarr.npz +0 -0
- numpy-1.10.0.post2/numpy/lib/tests/test__iotools.py +348 -0
- numpy-1.10.0.post2/numpy/lib/tests/test__version.py +70 -0
- numpy-1.10.0.post2/numpy/lib/tests/test_arraypad.py +1047 -0
- numpy-1.10.0.post2/numpy/lib/tests/test_arraysetops.py +309 -0
- numpy-1.10.0.post2/numpy/lib/tests/test_financial.py +163 -0
- numpy-1.10.0.post2/numpy/lib/tests/test_format.py +841 -0
- numpy-1.10.0.post2/numpy/lib/tests/test_function_base.py +2555 -0
- numpy-1.10.0.post2/numpy/lib/tests/test_index_tricks.py +326 -0
- numpy-1.10.0.post2/numpy/lib/tests/test_io.py +1916 -0
- numpy-1.10.0.post2/numpy/lib/tests/test_nanfunctions.py +707 -0
- numpy-1.10.0.post2/numpy/lib/tests/test_packbits.py +26 -0
- numpy-1.10.0.post2/numpy/lib/tests/test_polynomial.py +188 -0
- numpy-1.10.0.post2/numpy/lib/tests/test_recfunctions.py +734 -0
- numpy-1.10.0.post2/numpy/lib/tests/test_shape_base.py +386 -0
- numpy-1.10.0.post2/numpy/lib/tests/test_stride_tricks.py +405 -0
- numpy-1.10.0.post2/numpy/lib/tests/test_twodim_base.py +535 -0
- numpy-1.10.0.post2/numpy/lib/tests/test_type_check.py +332 -0
- numpy-1.10.0.post2/numpy/lib/twodim_base.py +1007 -0
- numpy-1.10.0.post2/numpy/lib/type_check.py +596 -0
- numpy-1.10.0.post2/numpy/lib/utils.py +1122 -0
- numpy-1.10.0.post2/numpy/linalg/lapack_lite/python_xerbla.c +46 -0
- numpy-1.10.0.post2/numpy/linalg/lapack_litemodule.c +358 -0
- numpy-1.10.0.post2/numpy/linalg/linalg.py +2406 -0
- numpy-1.10.0.post2/numpy/linalg/tests/test_build.py +59 -0
- numpy-1.10.0.post2/numpy/linalg/tests/test_linalg.py +1351 -0
- numpy-1.10.0.post2/numpy/linalg/tests/test_regression.py +95 -0
- numpy-1.10.0.post2/numpy/linalg/umath_linalg.c.src +3236 -0
- numpy-1.10.0.post2/numpy/ma/__init__.py +56 -0
- numpy-1.10.0.post2/numpy/ma/bench.py +131 -0
- numpy-1.10.0.post2/numpy/ma/core.py +7608 -0
- numpy-1.10.0.post2/numpy/ma/extras.py +1953 -0
- numpy-1.10.0.post2/numpy/ma/mrecords.py +796 -0
- numpy-1.10.0.post2/numpy/ma/setup.py +13 -0
- numpy-1.10.0.post2/numpy/ma/tests/test_core.py +4100 -0
- numpy-1.10.0.post2/numpy/ma/tests/test_extras.py +1132 -0
- numpy-1.10.0.post2/numpy/ma/tests/test_mrecords.py +520 -0
- numpy-1.10.0.post2/numpy/ma/tests/test_old_ma.py +879 -0
- numpy-1.10.0.post2/numpy/ma/tests/test_regression.py +80 -0
- numpy-1.10.0.post2/numpy/ma/tests/test_subclassing.py +338 -0
- numpy-1.10.0.post2/numpy/ma/testutils.py +289 -0
- numpy-1.10.0.post2/numpy/ma/timer_comparison.py +440 -0
- numpy-1.10.0.post2/numpy/matlib.py +358 -0
- numpy-1.10.0.post2/numpy/matrixlib/defmatrix.py +1232 -0
- numpy-1.10.0.post2/numpy/matrixlib/tests/test_defmatrix.py +449 -0
- numpy-1.10.0.post2/numpy/matrixlib/tests/test_multiarray.py +23 -0
- numpy-1.10.0.post2/numpy/matrixlib/tests/test_numeric.py +23 -0
- numpy-1.10.0.post2/numpy/matrixlib/tests/test_regression.py +37 -0
- numpy-1.10.0.post2/numpy/polynomial/_polybase.py +962 -0
- numpy-1.10.0.post2/numpy/polynomial/chebyshev.py +2056 -0
- numpy-1.10.0.post2/numpy/polynomial/hermite.py +1831 -0
- numpy-1.10.0.post2/numpy/polynomial/hermite_e.py +1828 -0
- numpy-1.10.0.post2/numpy/polynomial/laguerre.py +1780 -0
- numpy-1.10.0.post2/numpy/polynomial/legendre.py +1808 -0
- numpy-1.10.0.post2/numpy/polynomial/polyutils.py +403 -0
- numpy-1.10.0.post2/numpy/random/mtrand/distributions.c +912 -0
- numpy-1.10.0.post2/numpy/random/mtrand/mtrand.c +34805 -0
- numpy-1.10.0.post2/numpy/random/mtrand/mtrand.pyx +4766 -0
- numpy-1.10.0.post2/numpy/random/setup.py +61 -0
- numpy-1.10.0.post2/numpy/random/tests/test_random.py +723 -0
- numpy-1.10.0.post2/numpy/random/tests/test_regression.py +117 -0
- numpy-1.10.0.post2/numpy/setup.py +29 -0
- numpy-1.10.0.post2/numpy/testing/__init__.py +15 -0
- numpy-1.10.0.post2/numpy/testing/decorators.py +271 -0
- numpy-1.10.0.post2/numpy/testing/noseclasses.py +353 -0
- numpy-1.10.0.post2/numpy/testing/nosetester.py +511 -0
- numpy-1.10.0.post2/numpy/testing/print_coercion_tables.py +91 -0
- numpy-1.10.0.post2/numpy/testing/setup.py +20 -0
- numpy-1.10.0.post2/numpy/testing/tests/test_decorators.py +182 -0
- numpy-1.10.0.post2/numpy/testing/tests/test_utils.py +781 -0
- numpy-1.10.0.post2/numpy/testing/utils.py +1831 -0
- numpy-1.10.0.post2/numpy/tests/test_ctypeslib.py +106 -0
- numpy-1.10.0.post2/numpy/tests/test_matlib.py +55 -0
- numpy-1.10.0.post2/numpy/tests/test_scripts.py +69 -0
- numpy-1.10.0.post2/numpy/version.py +10 -0
- numpy-1.10.0.post2/setup.py +260 -0
- numpy-1.10.0.post2/site.cfg.example +193 -0
- numpy-1.10.0.post2/tmp.txt +789 -0
- numpy-1.10.0.post2/tools/swig/README +145 -0
- numpy-1.10.0.post2/tools/swig/numpy.i +3161 -0
- numpy-1.10.0.post2/tools/swig/test/Array.i +135 -0
- numpy-1.10.0.post2/tools/swig/test/ArrayZ.cxx +131 -0
- numpy-1.10.0.post2/tools/swig/test/ArrayZ.h +56 -0
- numpy-1.10.0.post2/tools/swig/test/Flat.cxx +36 -0
- numpy-1.10.0.post2/tools/swig/test/Flat.h +34 -0
- numpy-1.10.0.post2/tools/swig/test/Flat.i +36 -0
- numpy-1.10.0.post2/tools/swig/test/Makefile +37 -0
- numpy-1.10.0.post2/tools/swig/test/setup.py +71 -0
- numpy-1.10.0.post2/tools/swig/test/testArray.py +385 -0
- numpy-1.10.0.post2/tools/swig/test/testFarray.py +159 -0
- numpy-1.10.0.post2/tools/swig/test/testFlat.py +200 -0
- numpy-1.10.0.post2/tools/swig/test/testFortran.py +173 -0
- numpy-1.10.0.post2/tools/swig/test/testMatrix.py +362 -0
- numpy-1.10.0.post2/tools/swig/test/testSuperTensor.py +388 -0
- numpy-1.10.0.post2/tools/swig/test/testTensor.py +402 -0
- numpy-1.10.0.post2/tools/swig/test/testVector.py +381 -0
- numpy-1.9.2/INSTALL.txt +0 -138
- numpy-1.9.2/LICENSE.txt +0 -30
- numpy-1.9.2/MANIFEST.in +0 -26
- numpy-1.9.2/PKG-INFO +0 -39
- numpy-1.9.2/doc/scipy-sphinx-theme/.git +0 -1
- numpy-1.9.2/doc/source/conf.py +0 -331
- numpy-1.9.2/doc/source/dev/gitwash/branch_list.png +0 -0
- numpy-1.9.2/doc/source/dev/gitwash/branch_list_compare.png +0 -0
- numpy-1.9.2/doc/source/dev/gitwash/development_workflow.rst +0 -568
- numpy-1.9.2/doc/source/dev/gitwash/git_links.inc +0 -88
- numpy-1.9.2/doc/source/dev/gitwash/index.rst +0 -14
- numpy-1.9.2/doc/source/dev/index.rst +0 -10
- numpy-1.9.2/doc/source/reference/arrays.classes.rst +0 -427
- numpy-1.9.2/doc/source/reference/arrays.dtypes.rst +0 -534
- numpy-1.9.2/doc/source/reference/arrays.indexing.rst +0 -550
- numpy-1.9.2/doc/source/reference/arrays.interface.rst +0 -336
- numpy-1.9.2/doc/source/reference/arrays.ndarray.rst +0 -609
- numpy-1.9.2/doc/source/reference/arrays.scalars.rst +0 -291
- numpy-1.9.2/doc/source/reference/c-api.array.rst +0 -3362
- numpy-1.9.2/doc/source/reference/c-api.config.rst +0 -103
- numpy-1.9.2/doc/source/reference/c-api.coremath.rst +0 -420
- numpy-1.9.2/doc/source/reference/c-api.dtype.rst +0 -376
- numpy-1.9.2/doc/source/reference/c-api.generalized-ufuncs.rst +0 -171
- numpy-1.9.2/doc/source/reference/c-api.iterator.rst +0 -1298
- numpy-1.9.2/doc/source/reference/c-api.types-and-structures.rst +0 -1204
- numpy-1.9.2/doc/source/reference/c-api.ufunc.rst +0 -399
- numpy-1.9.2/doc/source/reference/index.rst +0 -44
- numpy-1.9.2/doc/source/reference/internals.code-explanations.rst +0 -666
- numpy-1.9.2/doc/source/reference/routines.array-manipulation.rst +0 -113
- numpy-1.9.2/doc/source/reference/routines.io.rst +0 -74
- numpy-1.9.2/doc/source/reference/routines.linalg.rst +0 -88
- numpy-1.9.2/doc/source/reference/routines.ma.rst +0 -405
- numpy-1.9.2/doc/source/reference/routines.sort.rst +0 -42
- numpy-1.9.2/doc/source/reference/routines.statistics.rst +0 -55
- numpy-1.9.2/doc/source/reference/swig.interface-file.rst +0 -1055
- numpy-1.9.2/doc/source/reference/swig.testing.rst +0 -166
- numpy-1.9.2/doc/source/reference/ufuncs.rst +0 -651
- numpy-1.9.2/doc/source/release.rst +0 -19
- numpy-1.9.2/doc/source/user/basics.io.genfromtxt.rst +0 -531
- numpy-1.9.2/doc/source/user/basics.rec.rst +0 -7
- numpy-1.9.2/doc/source/user/c-info.beyond-basics.rst +0 -560
- numpy-1.9.2/doc/source/user/c-info.how-to-extend.rst +0 -642
- numpy-1.9.2/doc/source/user/c-info.python-as-glue.rst +0 -1528
- numpy-1.9.2/doc/source/user/c-info.ufunc-tutorial.rst +0 -1211
- numpy-1.9.2/doc/source/user/install.rst +0 -180
- numpy-1.9.2/doc/sphinxext/.git +0 -1
- numpy-1.9.2/numpy/__init__.py +0 -216
- numpy-1.9.2/numpy/_import_tools.py +0 -348
- numpy-1.9.2/numpy/add_newdocs.py +0 -7518
- numpy-1.9.2/numpy/compat/_inspect.py +0 -221
- numpy-1.9.2/numpy/compat/py3k.py +0 -89
- numpy-1.9.2/numpy/compat/setup.py +0 -12
- numpy-1.9.2/numpy/core/__init__.py +0 -78
- numpy-1.9.2/numpy/core/_internal.py +0 -570
- numpy-1.9.2/numpy/core/_methods.py +0 -134
- numpy-1.9.2/numpy/core/arrayprint.py +0 -752
- numpy-1.9.2/numpy/core/blasdot/_dotblas.c +0 -1255
- numpy-1.9.2/numpy/core/blasdot/apple_sgemv_patch.c +0 -216
- numpy-1.9.2/numpy/core/blasdot/cblas.h +0 -578
- numpy-1.9.2/numpy/core/code_generators/cversions.txt +0 -31
- numpy-1.9.2/numpy/core/code_generators/generate_ufunc_api.py +0 -219
- numpy-1.9.2/numpy/core/code_generators/generate_umath.py +0 -972
- numpy-1.9.2/numpy/core/code_generators/numpy_api.py +0 -412
- numpy-1.9.2/numpy/core/code_generators/ufunc_docstrings.py +0 -3419
- numpy-1.9.2/numpy/core/defchararray.py +0 -2687
- numpy-1.9.2/numpy/core/fromnumeric.py +0 -2938
- numpy-1.9.2/numpy/core/function_base.py +0 -190
- numpy-1.9.2/numpy/core/getlimits.py +0 -306
- numpy-1.9.2/numpy/core/include/numpy/fenv/fenv.c +0 -38
- numpy-1.9.2/numpy/core/include/numpy/fenv/fenv.h +0 -224
- numpy-1.9.2/numpy/core/include/numpy/ndarrayobject.h +0 -237
- numpy-1.9.2/numpy/core/include/numpy/ndarraytypes.h +0 -1820
- numpy-1.9.2/numpy/core/include/numpy/npy_3kcompat.h +0 -506
- numpy-1.9.2/numpy/core/include/numpy/npy_common.h +0 -1038
- numpy-1.9.2/numpy/core/include/numpy/npy_cpu.h +0 -122
- numpy-1.9.2/numpy/core/include/numpy/npy_endian.h +0 -49
- numpy-1.9.2/numpy/core/include/numpy/npy_math.h +0 -479
- numpy-1.9.2/numpy/core/include/numpy/numpyconfig.h +0 -35
- numpy-1.9.2/numpy/core/machar.py +0 -338
- numpy-1.9.2/numpy/core/memmap.py +0 -308
- numpy-1.9.2/numpy/core/numeric.py +0 -2842
- numpy-1.9.2/numpy/core/numerictypes.py +0 -1042
- numpy-1.9.2/numpy/core/records.py +0 -804
- numpy-1.9.2/numpy/core/setup.py +0 -1016
- numpy-1.9.2/numpy/core/setup_common.py +0 -321
- numpy-1.9.2/numpy/core/shape_base.py +0 -277
- numpy-1.9.2/numpy/core/src/multiarray/alloc.c +0 -241
- numpy-1.9.2/numpy/core/src/multiarray/arrayobject.c +0 -1791
- numpy-1.9.2/numpy/core/src/multiarray/arraytypes.c.src +0 -4372
- numpy-1.9.2/numpy/core/src/multiarray/arraytypes.h +0 -13
- numpy-1.9.2/numpy/core/src/multiarray/buffer.c +0 -954
- numpy-1.9.2/numpy/core/src/multiarray/calculation.c +0 -1229
- numpy-1.9.2/numpy/core/src/multiarray/common.c +0 -798
- numpy-1.9.2/numpy/core/src/multiarray/common.h +0 -328
- numpy-1.9.2/numpy/core/src/multiarray/conversion_utils.c +0 -1240
- numpy-1.9.2/numpy/core/src/multiarray/convert.c +0 -589
- numpy-1.9.2/numpy/core/src/multiarray/convert_datatype.c +0 -2199
- numpy-1.9.2/numpy/core/src/multiarray/ctors.c +0 -3785
- numpy-1.9.2/numpy/core/src/multiarray/datetime.c +0 -3823
- numpy-1.9.2/numpy/core/src/multiarray/datetime_busday.c +0 -1322
- numpy-1.9.2/numpy/core/src/multiarray/datetime_busdaycal.c +0 -552
- numpy-1.9.2/numpy/core/src/multiarray/datetime_strings.c +0 -1772
- numpy-1.9.2/numpy/core/src/multiarray/descriptor.c +0 -3658
- numpy-1.9.2/numpy/core/src/multiarray/dtype_transfer.c +0 -4232
- numpy-1.9.2/numpy/core/src/multiarray/einsum.c.src +0 -3013
- numpy-1.9.2/numpy/core/src/multiarray/getset.c +0 -984
- numpy-1.9.2/numpy/core/src/multiarray/hashdescr.c +0 -319
- numpy-1.9.2/numpy/core/src/multiarray/item_selection.c +0 -2711
- numpy-1.9.2/numpy/core/src/multiarray/iterators.c +0 -2160
- numpy-1.9.2/numpy/core/src/multiarray/lowlevel_strided_loops.c.src +0 -1767
- numpy-1.9.2/numpy/core/src/multiarray/mapping.c +0 -3316
- numpy-1.9.2/numpy/core/src/multiarray/mapping.h +0 -73
- numpy-1.9.2/numpy/core/src/multiarray/methods.c +0 -2497
- numpy-1.9.2/numpy/core/src/multiarray/multiarray_tests.c.src +0 -977
- numpy-1.9.2/numpy/core/src/multiarray/multiarraymodule.c +0 -4202
- numpy-1.9.2/numpy/core/src/multiarray/multiarraymodule.h +0 -4
- numpy-1.9.2/numpy/core/src/multiarray/multiarraymodule_onefile.c +0 -58
- numpy-1.9.2/numpy/core/src/multiarray/nditer_api.c +0 -2809
- numpy-1.9.2/numpy/core/src/multiarray/nditer_constr.c +0 -3159
- numpy-1.9.2/numpy/core/src/multiarray/nditer_pywrap.c +0 -2492
- numpy-1.9.2/numpy/core/src/multiarray/number.c +0 -1057
- numpy-1.9.2/numpy/core/src/multiarray/number.h +0 -76
- numpy-1.9.2/numpy/core/src/multiarray/numpymemoryview.c +0 -309
- numpy-1.9.2/numpy/core/src/multiarray/numpyos.c +0 -683
- numpy-1.9.2/numpy/core/src/multiarray/scalarapi.c +0 -861
- numpy-1.9.2/numpy/core/src/multiarray/scalartypes.c.src +0 -4270
- numpy-1.9.2/numpy/core/src/multiarray/scalartypes.h +0 -52
- numpy-1.9.2/numpy/core/src/multiarray/shape.c +0 -1141
- numpy-1.9.2/numpy/core/src/multiarray/ucsnarrow.c +0 -173
- numpy-1.9.2/numpy/core/src/npymath/ieee754.c.src +0 -814
- numpy-1.9.2/numpy/core/src/npymath/npy_math.c.src +0 -527
- numpy-1.9.2/numpy/core/src/npymath/npy_math_complex.c.src +0 -291
- numpy-1.9.2/numpy/core/src/npymath/npy_math_private.h +0 -539
- numpy-1.9.2/numpy/core/src/npysort/heapsort.c.src +0 -341
- numpy-1.9.2/numpy/core/src/npysort/mergesort.c.src +0 -428
- numpy-1.9.2/numpy/core/src/npysort/npysort_common.h +0 -367
- numpy-1.9.2/numpy/core/src/npysort/quicksort.c.src +0 -363
- numpy-1.9.2/numpy/core/src/npysort/selection.c.src +0 -474
- numpy-1.9.2/numpy/core/src/private/npy_config.h +0 -44
- numpy-1.9.2/numpy/core/src/private/npy_partition.h.src +0 -138
- numpy-1.9.2/numpy/core/src/private/npy_sort.h +0 -194
- numpy-1.9.2/numpy/core/src/private/scalarmathmodule.h.src +0 -42
- numpy-1.9.2/numpy/core/src/private/ufunc_override.h +0 -384
- numpy-1.9.2/numpy/core/src/scalarmathmodule.c.src +0 -1980
- numpy-1.9.2/numpy/core/src/umath/funcs.inc.src +0 -715
- numpy-1.9.2/numpy/core/src/umath/loops.c.src +0 -2654
- numpy-1.9.2/numpy/core/src/umath/loops.h.src +0 -501
- numpy-1.9.2/numpy/core/src/umath/operand_flag_tests.c.src +0 -105
- numpy-1.9.2/numpy/core/src/umath/simd.inc.src +0 -881
- numpy-1.9.2/numpy/core/src/umath/test_rational.c.src +0 -1404
- numpy-1.9.2/numpy/core/src/umath/ufunc_object.c +0 -5520
- numpy-1.9.2/numpy/core/src/umath/ufunc_type_resolution.c +0 -2164
- numpy-1.9.2/numpy/core/src/umath/umath_tests.c.src +0 -341
- numpy-1.9.2/numpy/core/src/umath/umathmodule.c +0 -561
- numpy-1.9.2/numpy/core/src/umath/umathmodule_onefile.c +0 -6
- numpy-1.9.2/numpy/core/tests/test_abc.py +0 -45
- numpy-1.9.2/numpy/core/tests/test_api.py +0 -514
- numpy-1.9.2/numpy/core/tests/test_arrayprint.py +0 -167
- numpy-1.9.2/numpy/core/tests/test_blasdot.py +0 -249
- numpy-1.9.2/numpy/core/tests/test_datetime.py +0 -1781
- numpy-1.9.2/numpy/core/tests/test_defchararray.py +0 -642
- numpy-1.9.2/numpy/core/tests/test_deprecations.py +0 -512
- numpy-1.9.2/numpy/core/tests/test_dtype.py +0 -542
- numpy-1.9.2/numpy/core/tests/test_einsum.py +0 -583
- numpy-1.9.2/numpy/core/tests/test_errstate.py +0 -51
- numpy-1.9.2/numpy/core/tests/test_function_base.py +0 -111
- numpy-1.9.2/numpy/core/tests/test_getlimits.py +0 -86
- numpy-1.9.2/numpy/core/tests/test_half.py +0 -439
- numpy-1.9.2/numpy/core/tests/test_indexerrors.py +0 -127
- numpy-1.9.2/numpy/core/tests/test_indexing.py +0 -1014
- numpy-1.9.2/numpy/core/tests/test_item_selection.py +0 -70
- numpy-1.9.2/numpy/core/tests/test_machar.py +0 -30
- numpy-1.9.2/numpy/core/tests/test_memmap.py +0 -127
- numpy-1.9.2/numpy/core/tests/test_multiarray.py +0 -4645
- numpy-1.9.2/numpy/core/tests/test_multiarray_assignment.py +0 -80
- numpy-1.9.2/numpy/core/tests/test_nditer.py +0 -2630
- numpy-1.9.2/numpy/core/tests/test_numeric.py +0 -2117
- numpy-1.9.2/numpy/core/tests/test_numerictypes.py +0 -377
- numpy-1.9.2/numpy/core/tests/test_print.py +0 -245
- numpy-1.9.2/numpy/core/tests/test_records.py +0 -185
- numpy-1.9.2/numpy/core/tests/test_regression.py +0 -2108
- numpy-1.9.2/numpy/core/tests/test_scalarinherit.py +0 -34
- numpy-1.9.2/numpy/core/tests/test_scalarmath.py +0 -275
- numpy-1.9.2/numpy/core/tests/test_shape_base.py +0 -250
- numpy-1.9.2/numpy/core/tests/test_ufunc.py +0 -1153
- numpy-1.9.2/numpy/core/tests/test_umath.py +0 -1695
- numpy-1.9.2/numpy/core/tests/test_umath_complex.py +0 -537
- numpy-1.9.2/numpy/core/tests/test_unicode.py +0 -357
- numpy-1.9.2/numpy/distutils/__init__.py +0 -39
- numpy-1.9.2/numpy/distutils/ccompiler.py +0 -656
- numpy-1.9.2/numpy/distutils/command/autodist.py +0 -43
- numpy-1.9.2/numpy/distutils/command/build.py +0 -39
- numpy-1.9.2/numpy/distutils/command/build_clib.py +0 -284
- numpy-1.9.2/numpy/distutils/command/build_ext.py +0 -503
- numpy-1.9.2/numpy/distutils/command/config.py +0 -476
- numpy-1.9.2/numpy/distutils/exec_command.py +0 -618
- numpy-1.9.2/numpy/distutils/fcompiler/compaq.py +0 -128
- numpy-1.9.2/numpy/distutils/fcompiler/gnu.py +0 -390
- numpy-1.9.2/numpy/distutils/fcompiler/intel.py +0 -205
- numpy-1.9.2/numpy/distutils/fcompiler/pg.py +0 -60
- numpy-1.9.2/numpy/distutils/fcompiler/sun.py +0 -52
- numpy-1.9.2/numpy/distutils/intelccompiler.py +0 -45
- numpy-1.9.2/numpy/distutils/lib2def.py +0 -116
- numpy-1.9.2/numpy/distutils/mingw32ccompiler.py +0 -582
- numpy-1.9.2/numpy/distutils/misc_util.py +0 -2271
- numpy-1.9.2/numpy/distutils/npy_pkg_config.py +0 -464
- numpy-1.9.2/numpy/distutils/system_info.py +0 -2319
- numpy-1.9.2/numpy/distutils/tests/f2py_ext/tests/test_fib2.py +0 -13
- numpy-1.9.2/numpy/distutils/tests/f2py_f90_ext/tests/test_foo.py +0 -12
- numpy-1.9.2/numpy/distutils/tests/gen_ext/tests/test_fib3.py +0 -12
- numpy-1.9.2/numpy/distutils/tests/pyrex_ext/tests/test_primes.py +0 -14
- numpy-1.9.2/numpy/distutils/tests/swig_ext/tests/test_example.py +0 -18
- numpy-1.9.2/numpy/distutils/tests/swig_ext/tests/test_example2.py +0 -16
- numpy-1.9.2/numpy/distutils/tests/test_fcompiler_gnu.py +0 -53
- numpy-1.9.2/numpy/distutils/tests/test_fcompiler_intel.py +0 -36
- numpy-1.9.2/numpy/distutils/tests/test_misc_util.py +0 -75
- numpy-1.9.2/numpy/distutils/tests/test_npy_pkg_config.py +0 -98
- numpy-1.9.2/numpy/distutils/unixccompiler.py +0 -113
- numpy-1.9.2/numpy/doc/byteswapping.py +0 -147
- numpy-1.9.2/numpy/doc/creation.py +0 -144
- numpy-1.9.2/numpy/doc/glossary.py +0 -418
- numpy-1.9.2/numpy/doc/indexing.py +0 -437
- numpy-1.9.2/numpy/doc/structured_arrays.py +0 -223
- numpy-1.9.2/numpy/f2py/__init__.py +0 -49
- numpy-1.9.2/numpy/f2py/auxfuncs.py +0 -711
- numpy-1.9.2/numpy/f2py/capi_maps.py +0 -773
- numpy-1.9.2/numpy/f2py/cb_rules.py +0 -539
- numpy-1.9.2/numpy/f2py/cfuncs.py +0 -1224
- numpy-1.9.2/numpy/f2py/common_rules.py +0 -132
- numpy-1.9.2/numpy/f2py/crackfortran.py +0 -2870
- numpy-1.9.2/numpy/f2py/diagnose.py +0 -149
- numpy-1.9.2/numpy/f2py/f2py2e.py +0 -598
- numpy-1.9.2/numpy/f2py/f2py_testing.py +0 -46
- numpy-1.9.2/numpy/f2py/f90mod_rules.py +0 -246
- numpy-1.9.2/numpy/f2py/func2subr.py +0 -291
- numpy-1.9.2/numpy/f2py/rules.py +0 -1448
- numpy-1.9.2/numpy/f2py/setup.py +0 -129
- numpy-1.9.2/numpy/f2py/src/fortranobject.c +0 -972
- numpy-1.9.2/numpy/f2py/src/fortranobject.h +0 -162
- numpy-1.9.2/numpy/f2py/tests/src/array_from_pyobj/wrapmodule.c +0 -223
- numpy-1.9.2/numpy/f2py/tests/test_array_from_pyobj.py +0 -559
- numpy-1.9.2/numpy/f2py/tests/test_assumed_shape.py +0 -37
- numpy-1.9.2/numpy/f2py/tests/test_callback.py +0 -132
- numpy-1.9.2/numpy/f2py/tests/test_kind.py +0 -36
- numpy-1.9.2/numpy/f2py/tests/test_mixed.py +0 -41
- numpy-1.9.2/numpy/f2py/tests/test_regression.py +0 -32
- numpy-1.9.2/numpy/f2py/tests/test_return_character.py +0 -142
- numpy-1.9.2/numpy/f2py/tests/test_return_complex.py +0 -169
- numpy-1.9.2/numpy/f2py/tests/test_return_integer.py +0 -178
- numpy-1.9.2/numpy/f2py/tests/test_return_logical.py +0 -187
- numpy-1.9.2/numpy/f2py/tests/test_return_real.py +0 -203
- numpy-1.9.2/numpy/f2py/tests/test_size.py +0 -47
- numpy-1.9.2/numpy/f2py/tests/util.py +0 -353
- numpy-1.9.2/numpy/f2py/use_rules.py +0 -109
- numpy-1.9.2/numpy/fft/fftpack.c +0 -1501
- numpy-1.9.2/numpy/fft/fftpack.h +0 -28
- numpy-1.9.2/numpy/fft/fftpack.py +0 -1169
- numpy-1.9.2/numpy/fft/fftpack_litemodule.c +0 -371
- numpy-1.9.2/numpy/fft/info.py +0 -179
- numpy-1.9.2/numpy/fft/setup.py +0 -20
- numpy-1.9.2/numpy/fft/tests/test_fftpack.py +0 -75
- numpy-1.9.2/numpy/fft/tests/test_helper.py +0 -78
- numpy-1.9.2/numpy/lib/_iotools.py +0 -891
- numpy-1.9.2/numpy/lib/arraypad.py +0 -1475
- numpy-1.9.2/numpy/lib/arraysetops.py +0 -464
- numpy-1.9.2/numpy/lib/arrayterator.py +0 -226
- numpy-1.9.2/numpy/lib/financial.py +0 -737
- numpy-1.9.2/numpy/lib/format.py +0 -771
- numpy-1.9.2/numpy/lib/function_base.py +0 -3884
- numpy-1.9.2/numpy/lib/index_tricks.py +0 -869
- numpy-1.9.2/numpy/lib/info.py +0 -151
- numpy-1.9.2/numpy/lib/nanfunctions.py +0 -1158
- numpy-1.9.2/numpy/lib/npyio.py +0 -1918
- numpy-1.9.2/numpy/lib/polynomial.py +0 -1271
- numpy-1.9.2/numpy/lib/recfunctions.py +0 -1003
- numpy-1.9.2/numpy/lib/setup.py +0 -23
- numpy-1.9.2/numpy/lib/shape_base.py +0 -865
- numpy-1.9.2/numpy/lib/src/_compiled_base.c +0 -1761
- numpy-1.9.2/numpy/lib/stride_tricks.py +0 -123
- numpy-1.9.2/numpy/lib/tests/test__iotools.py +0 -326
- numpy-1.9.2/numpy/lib/tests/test__version.py +0 -57
- numpy-1.9.2/numpy/lib/tests/test_arraypad.py +0 -560
- numpy-1.9.2/numpy/lib/tests/test_arraysetops.py +0 -301
- numpy-1.9.2/numpy/lib/tests/test_financial.py +0 -160
- numpy-1.9.2/numpy/lib/tests/test_format.py +0 -716
- numpy-1.9.2/numpy/lib/tests/test_function_base.py +0 -2145
- numpy-1.9.2/numpy/lib/tests/test_index_tricks.py +0 -289
- numpy-1.9.2/numpy/lib/tests/test_io.py +0 -1754
- numpy-1.9.2/numpy/lib/tests/test_nanfunctions.py +0 -774
- numpy-1.9.2/numpy/lib/tests/test_polynomial.py +0 -177
- numpy-1.9.2/numpy/lib/tests/test_recfunctions.py +0 -705
- numpy-1.9.2/numpy/lib/tests/test_shape_base.py +0 -368
- numpy-1.9.2/numpy/lib/tests/test_stride_tricks.py +0 -238
- numpy-1.9.2/numpy/lib/tests/test_twodim_base.py +0 -504
- numpy-1.9.2/numpy/lib/tests/test_type_check.py +0 -328
- numpy-1.9.2/numpy/lib/twodim_base.py +0 -1003
- numpy-1.9.2/numpy/lib/type_check.py +0 -605
- numpy-1.9.2/numpy/lib/utils.py +0 -1176
- numpy-1.9.2/numpy/linalg/lapack_lite/python_xerbla.c +0 -47
- numpy-1.9.2/numpy/linalg/lapack_litemodule.c +0 -362
- numpy-1.9.2/numpy/linalg/linalg.py +0 -2136
- numpy-1.9.2/numpy/linalg/tests/test_build.py +0 -53
- numpy-1.9.2/numpy/linalg/tests/test_linalg.py +0 -1156
- numpy-1.9.2/numpy/linalg/tests/test_regression.py +0 -90
- numpy-1.9.2/numpy/linalg/umath_linalg.c.src +0 -3210
- numpy-1.9.2/numpy/ma/__init__.py +0 -58
- numpy-1.9.2/numpy/ma/bench.py +0 -166
- numpy-1.9.2/numpy/ma/core.py +0 -7374
- numpy-1.9.2/numpy/ma/extras.py +0 -1932
- numpy-1.9.2/numpy/ma/mrecords.py +0 -734
- numpy-1.9.2/numpy/ma/setup.py +0 -20
- numpy-1.9.2/numpy/ma/tests/test_core.py +0 -3706
- numpy-1.9.2/numpy/ma/tests/test_extras.py +0 -954
- numpy-1.9.2/numpy/ma/tests/test_mrecords.py +0 -521
- numpy-1.9.2/numpy/ma/tests/test_old_ma.py +0 -869
- numpy-1.9.2/numpy/ma/tests/test_regression.py +0 -75
- numpy-1.9.2/numpy/ma/tests/test_subclassing.py +0 -236
- numpy-1.9.2/numpy/ma/testutils.py +0 -240
- numpy-1.9.2/numpy/ma/timer_comparison.py +0 -459
- numpy-1.9.2/numpy/matlib.py +0 -358
- numpy-1.9.2/numpy/matrixlib/defmatrix.py +0 -1094
- numpy-1.9.2/numpy/matrixlib/tests/test_defmatrix.py +0 -400
- numpy-1.9.2/numpy/matrixlib/tests/test_multiarray.py +0 -18
- numpy-1.9.2/numpy/matrixlib/tests/test_numeric.py +0 -10
- numpy-1.9.2/numpy/matrixlib/tests/test_regression.py +0 -34
- numpy-1.9.2/numpy/polynomial/_polybase.py +0 -962
- numpy-1.9.2/numpy/polynomial/chebyshev.py +0 -2056
- numpy-1.9.2/numpy/polynomial/hermite.py +0 -1789
- numpy-1.9.2/numpy/polynomial/hermite_e.py +0 -1786
- numpy-1.9.2/numpy/polynomial/laguerre.py +0 -1781
- numpy-1.9.2/numpy/polynomial/legendre.py +0 -1809
- numpy-1.9.2/numpy/polynomial/polytemplate.py +0 -927
- numpy-1.9.2/numpy/polynomial/polyutils.py +0 -403
- numpy-1.9.2/numpy/random/mtrand/distributions.c +0 -892
- numpy-1.9.2/numpy/random/mtrand/mtrand.c +0 -31204
- numpy-1.9.2/numpy/random/mtrand/mtrand.pyx +0 -4706
- numpy-1.9.2/numpy/random/setup.py +0 -74
- numpy-1.9.2/numpy/random/tests/test_random.py +0 -707
- numpy-1.9.2/numpy/random/tests/test_regression.py +0 -86
- numpy-1.9.2/numpy/setup.py +0 -27
- numpy-1.9.2/numpy/testing/__init__.py +0 -16
- numpy-1.9.2/numpy/testing/decorators.py +0 -271
- numpy-1.9.2/numpy/testing/noseclasses.py +0 -353
- numpy-1.9.2/numpy/testing/nosetester.py +0 -504
- numpy-1.9.2/numpy/testing/print_coercion_tables.py +0 -89
- numpy-1.9.2/numpy/testing/setup.py +0 -20
- numpy-1.9.2/numpy/testing/tests/test_decorators.py +0 -185
- numpy-1.9.2/numpy/testing/tests/test_utils.py +0 -558
- numpy-1.9.2/numpy/testing/utils.py +0 -1715
- numpy-1.9.2/numpy/tests/test_ctypeslib.py +0 -102
- numpy-1.9.2/numpy/tests/test_matlib.py +0 -55
- numpy-1.9.2/numpy/version.py +0 -10
- numpy-1.9.2/setup.py +0 -251
- numpy-1.9.2/site.cfg.example +0 -157
- numpy-1.9.2/tools/swig/README +0 -135
- numpy-1.9.2/tools/swig/numpy.i +0 -3085
- numpy-1.9.2/tools/swig/test/Array.i +0 -102
- numpy-1.9.2/tools/swig/test/Makefile +0 -34
- numpy-1.9.2/tools/swig/test/setup.py +0 -64
- numpy-1.9.2/tools/swig/test/testArray.py +0 -284
- numpy-1.9.2/tools/swig/test/testFarray.py +0 -159
- numpy-1.9.2/tools/swig/test/testFortran.py +0 -173
- numpy-1.9.2/tools/swig/test/testMatrix.py +0 -362
- numpy-1.9.2/tools/swig/test/testSuperTensor.py +0 -388
- numpy-1.9.2/tools/swig/test/testTensor.py +0 -402
- numpy-1.9.2/tools/swig/test/testVector.py +0 -381
- {numpy-1.9.2 → numpy-1.10.0.post2}/BENTO_BUILD.txt +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/COMPATIBILITY +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/DEV_README.txt +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/README.txt +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/THANKS.txt +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/Makefile +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/BUGS.txt +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/FAQ.txt +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/HISTORY.txt +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/Makefile +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/OLDNEWS.txt +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/README.txt +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/Release-1.x.txt +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/Release-2.x.txt +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/Release-3.x.txt +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/Release-4.x.txt +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/TESTING.txt +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/THANKS.txt +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/TODO.txt +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/apps.tex +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/bugs.tex +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/collectinput.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/commands.tex +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/default.css +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/docutils.conf +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/ex1/arr.f +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/ex1/bar.f +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/ex1/foo.f +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/ex1/foobar-smart.f90 +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/ex1/foobar.f90 +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/ex1/foobarmodule.tex +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/ex1/runme +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/f2py.1 +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/f2py2e.tex +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/README.txt +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/aerostructure.jpg +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/flow.jpg +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/mk_html.sh +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/mk_pdf.sh +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/mk_ps.sh +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/src/examples/exp1.f +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/src/examples/exp1mess.txt +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/src/examples/exp1session.txt +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/src/examples/foo.pyf +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/src/examples/foom.pyf +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/structure.jpg +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/fortranobject.tex +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/hello.f +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/index.html +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/intro.tex +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/multiarray/array_from_pyobj.c +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/multiarray/bar.c +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/multiarray/foo.f +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/multiarray/fortran_array_from_pyobj.txt +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/multiarray/fun.pyf +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/multiarray/run.pyf +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/multiarray/transpose.txt +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/multiarrays.txt +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/notes.tex +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/oldnews.html +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/options.tex +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/pyforttest.pyf +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/pytest.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/python9.tex +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/signaturefile.tex +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/simple.f +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/simple_session.dat +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/using_F_compiler.txt +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/win32_notes.txt +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/postprocess.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/release/1.3.0-notes.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/release/1.4.0-notes.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/release/1.5.0-notes.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/release/1.6.0-notes.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/release/1.6.1-notes.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/release/1.6.2-notes.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/release/1.7.0-notes.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/release/1.7.1-notes.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/release/1.7.2-notes.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/release/1.8.0-notes.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/release/1.8.1-notes.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/release/1.8.2-notes.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/release/1.9.0-notes.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/release/1.9.1-notes.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/release/1.9.2-notes.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/release/time_based_proposal.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/.gitignore +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/Makefile +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/README.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_static/scipyshiny_small.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/layout.html +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/searchbox.html +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/sourcelink.html +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/css/extend.css +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/css/pygments.css +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/css/scipy-central.css +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/css/spc-bootstrap.css +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/css/spc-extend.css +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/all-icons.svg +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/contents.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/create-new-account-icon.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/external-link-icon-shrunk.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/external-link-icon.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/external-link-icon.svg +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/external-link-list-icon-tiniest.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/external-link-list-icon-tiny.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/external-link-list-icon.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ad.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ae.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-af.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ag.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ai.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-al.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-am.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ao.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-aq.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ar.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-as.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-at.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-au.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-aw.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-az.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ba.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bb.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bd.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-be.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bf.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bg.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bh.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bi.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bj.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bl.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bm.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bn.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bo.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-br.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bs.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bt.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bw.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-by.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bz.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ca.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cc.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cd.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cf.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cg.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ch.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ci.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ck.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cl.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cm.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cn.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-co.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cr.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cu.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cv.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cw.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cx.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cy.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cz.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-de.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-dj.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-dk.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-dm.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-do.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-dz.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ec.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ee.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-eg.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-er.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-es.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-et.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-fi.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-fj.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-fk.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-fm.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-fo.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-fr.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ga.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gb.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gd.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ge.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gf.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gg.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gh.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gi.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gl.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gm.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gn.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gq.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gr.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gs.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gt.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gu.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gw.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gy.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-hk.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-hm.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-hn.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-hr.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ht.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-hu.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-id.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ie.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-il.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-im.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-in.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-io.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-iq.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ir.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-is.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-it.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-je.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-jm.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-jo.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-jp.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ke.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-kg.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-kh.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ki.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-km.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-kn.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-kp.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-kr.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-kw.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ky.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-kz.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-la.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-lb.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-lc.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-li.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-lk.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-lr.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ls.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-lt.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-lu.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-lv.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ly.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ma.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mc.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-md.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-me.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mf.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mg.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mh.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mk.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ml.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mm.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mn.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mo.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mp.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mq.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mr.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ms.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mt.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mu.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mv.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mw.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mx.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-my.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mz.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-na.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-nc.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ne.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-nf.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ng.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ni.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-nl.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-no.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-np.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-nr.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-nu.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-nz.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-om.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pa.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pe.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pf.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pg.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ph.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pk.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pl.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pm.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pn.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pr.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ps.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pt.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pw.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-py.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-qa.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-re.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ro.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-rs.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ru.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-rw.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sa.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sb.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sc.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sd.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-se.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sg.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sh.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-si.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sj.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sk.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sl.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sm.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sn.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-so.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sr.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-st.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sv.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sy.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sz.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tc.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-td.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tf.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tg.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-th.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tj.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tk.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tl.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tm.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tn.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-to.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tr.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tt.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tv.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tw.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tz.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ua.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ug.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-um.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-us.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-uy.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-uz.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-va.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-vc.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ve.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-vg.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-vi.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-vn.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-vu.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-wf.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ws.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ye.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-za.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-zm.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-zw.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/glyphicons-halflings-white.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/glyphicons-halflings.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/important-icon.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/information-icon.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/internet-web-browser.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/multiple-file-icon-shrunk.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/multiple-file-icon.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/multiple-file-icon.svg +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/multiple-file-list-icon-tiny.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/multiple-file-list-icon.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/navigation.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/person-list-icon-tiny.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/person-list-icon.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/scipy-logo.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/scipy_org_logo.gif +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/scipycentral_logo.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/scipyshiny_small.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/send-email-icon.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/single-file-icon-shrunk.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/single-file-icon.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/single-file-icon.svg +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/single-file-list-icon-tiniest.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/single-file-list-icon-tiny.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/single-file-list-icon.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/transparent-pixel.gif +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/ui-anim_basic_16x16.gif +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/js/copybutton.js +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/accordion.less +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/alerts.less +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/bootstrap.less +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/breadcrumbs.less +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/button-groups.less +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/buttons.less +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/carousel.less +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/close.less +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/code.less +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/component-animations.less +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/dropdowns.less +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/forms.less +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/grid.less +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/hero-unit.less +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/labels-badges.less +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/layouts.less +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/media.less +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/mixins.less +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/modals.less +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/navbar.less +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/navs.less +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/pager.less +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/pagination.less +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/popovers.less +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/progress-bars.less +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/reset.less +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/responsive-1200px-min.less +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/responsive-767px-max.less +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/responsive-768px-979px.less +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/responsive-navbar.less +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/responsive-utilities.less +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/responsive.less +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/scaffolding.less +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/sprites.less +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/tables.less +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/thumbnails.less +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/tooltip.less +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/type.less +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/utilities.less +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/variables.less +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/wells.less +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/spc-bootstrap.less +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/spc-content.less +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/spc-extend.less +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/spc-footer.less +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/spc-header.less +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/spc-rightsidebar.less +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/spc-utils.less +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/scipy.css_t +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/theme.conf +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/conf.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/index.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/test_autodoc.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/test_autodoc_2.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/test_autodoc_3.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/test_autodoc_4.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/test_optimize.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/_templates/autosummary/class.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/_templates/indexcontent.html +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/_templates/indexsidebar.html +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/_templates/layout.html +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/about.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/bugs.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/contents.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/dev/gitwash/configure_git.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/dev/gitwash/development_setup.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/dev/gitwash/dot2_dot3.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/dev/gitwash/following_latest.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/dev/gitwash/forking_button.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/dev/gitwash/git_development.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/dev/gitwash/git_intro.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/dev/gitwash/git_resources.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/dev/gitwash/pull_button.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/dev/gitwash_links.txt +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/advanced.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/allocarr.f90 +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/allocarr_session.dat +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/array.f +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/array_session.dat +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/calculate.f +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/calculate_session.dat +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/callback.f +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/callback2.pyf +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/callback_session.dat +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/common.f +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/common_session.dat +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/compile_session.dat +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/distutils.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/extcallback.f +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/extcallback_session.dat +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/fib1.f +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/fib1.pyf +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/fib2.pyf +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/fib3.f +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/ftype.f +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/ftype_session.dat +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/getting-started.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/index.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/moddata.f90 +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/moddata_session.dat +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/python-usage.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/run_main_session.dat +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/scalar.f +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/scalar_session.dat +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/setup_example.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/signature-file.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/spam.pyf +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/spam_session.dat +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/string.f +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/string_session.dat +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/usage.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/var.pyf +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/var_session.dat +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/glossary.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/license.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/neps/datetime-proposal.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/neps/datetime-proposal3.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/neps/deferred-ufunc-evaluation.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/neps/generalized-ufuncs.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/neps/groupby_additions.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/neps/index.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/neps/math_config_clean.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/neps/missing-data.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/neps/new-iterator-ufunc.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/neps/newbugtracker.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/neps/npy-format.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/neps/structured_array_extensions.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/neps/ufunc-overrides.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/neps/warnfix.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/arrays.datetime.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/arrays.nditer.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/arrays.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/c-api.deprecations.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/c-api.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/distutils.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/figures/dtype-hierarchy.dia +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/figures/dtype-hierarchy.pdf +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/figures/dtype-hierarchy.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/figures/threefundamental.fig +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/figures/threefundamental.pdf +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/figures/threefundamental.png +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/internals.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/maskedarray.baseclass.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/maskedarray.generic.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/maskedarray.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.array-creation.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.bitwise.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.char.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.ctypeslib.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.datetime.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.dtype.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.dual.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.emath.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.err.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.fft.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.financial.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.functional.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.help.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.indexing.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.logic.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.math.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.matlib.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.numarray.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.oldnumeric.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.other.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.padding.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.chebyshev.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.classes.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.hermite.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.hermite_e.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.laguerre.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.legendre.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.package.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.poly1d.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.polynomial.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.random.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.set.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.testing.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.window.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/swig.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/user/basics.broadcasting.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/user/basics.byteswapping.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/user/basics.creation.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/user/basics.indexing.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/user/basics.io.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/user/basics.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/user/basics.subclassing.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/user/basics.types.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/user/c-info.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/user/howtofind.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/user/index.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/user/introduction.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/user/misc.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/user/performance.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/user/whatisnumpy.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/.gitignore +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/.travis.yml +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/LICENSE.txt +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/MANIFEST.in +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/README.rst +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/__init__.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/comment_eater.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/compiler_unparse.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/docscrape.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/docscrape_sphinx.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/linkcode.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/numpydoc.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/phantom_import.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/plot_directive.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/tests/test_docscrape.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/tests/test_linkcode.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/tests/test_phantom_import.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/tests/test_plot_directive.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/tests/test_traitsdoc.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/traitsdoc.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/setup.py +0 -0
- {numpy-1.9.2/numpy/core/code_generators → numpy-1.10.0.post2/numpy/_build_utils}/__init__.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/compat/__init__.py +0 -0
- {numpy-1.9.2/numpy/distutils/tests/f2py_ext → numpy-1.10.0.post2/numpy/core/code_generators}/__init__.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/code_generators/genapi.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/code_generators/generate_numpy_api.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/cversions.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/include/numpy/_neighborhood_iterator_imp.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/include/numpy/_numpyconfig.h.in +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/include/numpy/arrayobject.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/include/numpy/arrayscalars.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/include/numpy/halffloat.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/include/numpy/noprefix.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/include/numpy/npy_1_7_deprecated_api.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/include/numpy/npy_interrupt.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/include/numpy/npy_no_deprecated_api.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/include/numpy/npy_os.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/include/numpy/old_defines.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/include/numpy/oldnumeric.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/include/numpy/ufuncobject.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/include/numpy/utils.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/info.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/mlib.ini.in +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/npymath.ini.in +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/dummymodule.c +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/_datetime.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/alloc.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/array_assign.c +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/array_assign.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/array_assign_array.c +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/array_assign_scalar.c +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/arrayobject.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/buffer.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/calculation.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/conversion_utils.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/convert.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/convert_datatype.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/ctors.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/datetime_busday.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/datetime_busdaycal.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/datetime_strings.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/descriptor.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/flagsobject.c +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/getset.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/hashdescr.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/item_selection.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/iterators.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/methods.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/nditer_impl.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/nditer_pywrap.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/nditer_templ.c.src +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/numpymemoryview.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/numpyos.h +0 -0
- {numpy-1.9.2/numpy/core/blasdot → numpy-1.10.0.post2/numpy/core/src/multiarray}/python_xerbla.c +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/refcount.c +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/refcount.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/sequence.c +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/sequence.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/shape.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/ucsnarrow.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/usertypes.c +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/usertypes.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/npymath/_signbit.c +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/npymath/halffloat.c +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/npymath/npy_math_common.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/npysort/binsearch.c.src +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/private/lowlevel_strided_loops.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/private/npy_binsearch.h.src +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/private/npy_fpmath.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/private/npy_pycompat.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/umath/reduction.c +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/umath/reduction.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/umath/struct_ufunc_test.c.src +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/umath/ufunc_object.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/umath/ufunc_type_resolution.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/tests/data/astype_copy.pkl +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/tests/data/recarray_from_file.fits +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/tests/test_scalarprint.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/ctypeslib.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/__version__.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/command/__init__.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/command/bdist_rpm.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/command/build_py.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/command/build_scripts.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/command/build_src.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/command/config_compiler.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/command/develop.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/command/egg_info.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/command/install.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/command/install_clib.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/command/install_data.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/command/install_headers.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/command/sdist.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/compat.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/conv_template.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/core.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/cpuinfo.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/environment.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/extension.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/__init__.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/absoft.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/g95.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/hpux.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/ibm.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/lahey.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/mips.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/nag.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/none.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/pathf95.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/vast.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/from_template.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/info.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/line_endings.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/log.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/mingw/gfortran_vs2003_hack.c +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/numpy_distribution.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/pathccompiler.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/setup.py +0 -0
- {numpy-1.9.2/numpy/distutils/tests/f2py_f90_ext → numpy-1.10.0.post2/numpy/distutils/tests/f2py_ext}/__init__.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/tests/f2py_ext/setup.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/tests/f2py_ext/src/fib1.f +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/tests/f2py_ext/src/fib2.pyf +0 -0
- {numpy-1.9.2/numpy/distutils/tests/gen_ext → numpy-1.10.0.post2/numpy/distutils/tests/f2py_f90_ext}/__init__.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/tests/f2py_f90_ext/include/body.f90 +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/tests/f2py_f90_ext/setup.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/tests/f2py_f90_ext/src/foo_free.f90 +0 -0
- {numpy-1.9.2/numpy/distutils/tests/pyrex_ext → numpy-1.10.0.post2/numpy/distutils/tests/gen_ext}/__init__.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/tests/gen_ext/setup.py +0 -0
- {numpy-1.9.2/numpy/distutils/tests/swig_ext → numpy-1.10.0.post2/numpy/distutils/tests/pyrex_ext}/__init__.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/tests/pyrex_ext/primes.pyx +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/tests/pyrex_ext/setup.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/tests/setup.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/tests/swig_ext/setup.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/tests/swig_ext/src/example.c +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/tests/swig_ext/src/example.i +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/tests/swig_ext/src/zoo.cc +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/tests/swig_ext/src/zoo.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/tests/swig_ext/src/zoo.i +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/tests/test_exec_command.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/doc/__init__.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/doc/basics.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/doc/broadcasting.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/doc/constants.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/doc/howtofind.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/doc/internals.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/doc/io.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/doc/jargon.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/doc/methods_vs_functions.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/doc/misc.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/doc/performance.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/doc/subclassing.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/doc/ufuncs.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/dual.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/f2py/__version__.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/f2py/info.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/f2py/tests/src/assumed_shape/.f2py_f2cmap +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/f2py/tests/src/assumed_shape/foo_free.f90 +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/f2py/tests/src/assumed_shape/foo_mod.f90 +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/f2py/tests/src/assumed_shape/foo_use.f90 +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/f2py/tests/src/assumed_shape/precision.f90 +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/f2py/tests/src/kind/foo.f90 +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/f2py/tests/src/mixed/foo.f +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/f2py/tests/src/mixed/foo_fixed.f90 +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/f2py/tests/src/mixed/foo_free.f90 +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/f2py/tests/src/regression/inout.f90 +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/f2py/tests/src/size/foo.f90 +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/fft/__init__.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/fft/helper.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/lib/__init__.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/lib/_datasource.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/lib/_version.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/lib/scimath.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/lib/tests/data/python3.npy +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/lib/tests/data/win64python2.npy +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/lib/tests/test__datasource.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/lib/tests/test_arrayterator.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/lib/tests/test_regression.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/lib/tests/test_ufunclike.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/lib/tests/test_utils.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/lib/ufunclike.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/lib/user_array.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/linalg/__init__.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/linalg/info.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/linalg/lapack_lite/blas_lite.c +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/linalg/lapack_lite/dlamch.c +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/linalg/lapack_lite/dlapack_lite.c +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/linalg/lapack_lite/f2c.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/linalg/lapack_lite/f2c_lite.c +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/linalg/lapack_lite/zlapack_lite.c +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/linalg/setup.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/linalg/tests/test_deprecations.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/ma/version.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/matrixlib/__init__.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/matrixlib/setup.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/polynomial/__init__.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/polynomial/polynomial.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/polynomial/setup.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/polynomial/tests/test_chebyshev.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/polynomial/tests/test_classes.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/polynomial/tests/test_hermite.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/polynomial/tests/test_hermite_e.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/polynomial/tests/test_laguerre.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/polynomial/tests/test_legendre.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/polynomial/tests/test_polynomial.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/polynomial/tests/test_polyutils.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/polynomial/tests/test_printing.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/random/__init__.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/random/info.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/random/mtrand/Python.pxi +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/random/mtrand/distributions.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/random/mtrand/generate_mtrand_c.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/random/mtrand/initarray.c +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/random/mtrand/initarray.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/random/mtrand/mtrand_py_helper.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/random/mtrand/numpy.pxd +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/random/mtrand/randomkit.c +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/random/mtrand/randomkit.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/testing/tests/test_doctesting.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/setupegg.py +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/Makefile +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/pyfragments.swg +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/Array1.cxx +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/Array1.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/Array2.cxx +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/Array2.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/Farray.cxx +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/Farray.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/Farray.i +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/Fortran.cxx +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/Fortran.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/Fortran.i +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/Matrix.cxx +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/Matrix.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/Matrix.i +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/SuperTensor.cxx +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/SuperTensor.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/SuperTensor.i +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/Tensor.cxx +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/Tensor.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/Tensor.i +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/Vector.cxx +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/Vector.h +0 -0
- {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/Vector.i +0 -0
|
@@ -1,1528 +0,0 @@
|
|
|
1
|
-
********************
|
|
2
|
-
Using Python as glue
|
|
3
|
-
********************
|
|
4
|
-
|
|
5
|
-
| There is no conversation more boring than the one where everybody
|
|
6
|
-
| agrees.
|
|
7
|
-
| --- *Michel de Montaigne*
|
|
8
|
-
|
|
9
|
-
| Duct tape is like the force. It has a light side, and a dark side, and
|
|
10
|
-
| it holds the universe together.
|
|
11
|
-
| --- *Carl Zwanzig*
|
|
12
|
-
|
|
13
|
-
Many people like to say that Python is a fantastic glue language.
|
|
14
|
-
Hopefully, this Chapter will convince you that this is true. The first
|
|
15
|
-
adopters of Python for science were typically people who used it to
|
|
16
|
-
glue together large application codes running on super-computers. Not
|
|
17
|
-
only was it much nicer to code in Python than in a shell script or
|
|
18
|
-
Perl, in addition, the ability to easily extend Python made it
|
|
19
|
-
relatively easy to create new classes and types specifically adapted
|
|
20
|
-
to the problems being solved. From the interactions of these early
|
|
21
|
-
contributors, Numeric emerged as an array-like object that could be
|
|
22
|
-
used to pass data between these applications.
|
|
23
|
-
|
|
24
|
-
As Numeric has matured and developed into NumPy, people have been able
|
|
25
|
-
to write more code directly in NumPy. Often this code is fast-enough
|
|
26
|
-
for production use, but there are still times that there is a need to
|
|
27
|
-
access compiled code. Either to get that last bit of efficiency out of
|
|
28
|
-
the algorithm or to make it easier to access widely-available codes
|
|
29
|
-
written in C/C++ or Fortran.
|
|
30
|
-
|
|
31
|
-
This chapter will review many of the tools that are available for the
|
|
32
|
-
purpose of accessing code written in other compiled languages. There
|
|
33
|
-
are many resources available for learning to call other compiled
|
|
34
|
-
libraries from Python and the purpose of this Chapter is not to make
|
|
35
|
-
you an expert. The main goal is to make you aware of some of the
|
|
36
|
-
possibilities so that you will know what to "Google" in order to learn more.
|
|
37
|
-
|
|
38
|
-
The http://www.scipy.org website also contains a great deal of useful
|
|
39
|
-
information about many of these tools. For example, there is a nice
|
|
40
|
-
description of using several of the tools explained in this chapter at
|
|
41
|
-
http://www.scipy.org/PerformancePython. This link provides several
|
|
42
|
-
ways to solve the same problem showing how to use and connect with
|
|
43
|
-
compiled code to get the best performance. In the process you can get
|
|
44
|
-
a taste for several of the approaches that will be discussed in this
|
|
45
|
-
chapter.
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
Calling other compiled libraries from Python
|
|
49
|
-
============================================
|
|
50
|
-
|
|
51
|
-
While Python is a great language and a pleasure to code in, its
|
|
52
|
-
dynamic nature results in overhead that can cause some code ( *i.e.*
|
|
53
|
-
raw computations inside of for loops) to be up 10-100 times slower
|
|
54
|
-
than equivalent code written in a static compiled language. In
|
|
55
|
-
addition, it can cause memory usage to be larger than necessary as
|
|
56
|
-
temporary arrays are created and destroyed during computation. For
|
|
57
|
-
many types of computing needs the extra slow-down and memory
|
|
58
|
-
consumption can often not be spared (at least for time- or memory-
|
|
59
|
-
critical portions of your code). Therefore one of the most common
|
|
60
|
-
needs is to call out from Python code to a fast, machine-code routine
|
|
61
|
-
(e.g. compiled using C/C++ or Fortran). The fact that this is
|
|
62
|
-
relatively easy to do is a big reason why Python is such an excellent
|
|
63
|
-
high-level language for scientific and engineering programming.
|
|
64
|
-
|
|
65
|
-
Their are two basic approaches to calling compiled code: writing an
|
|
66
|
-
extension module that is then imported to Python using the import
|
|
67
|
-
command, or calling a shared-library subroutine directly from Python
|
|
68
|
-
using the ctypes module (included in the standard distribution with
|
|
69
|
-
Python 2.5). The first method is the most common (but with the
|
|
70
|
-
inclusion of ctypes into Python 2.5 this status may change).
|
|
71
|
-
|
|
72
|
-
.. warning::
|
|
73
|
-
|
|
74
|
-
Calling C-code from Python can result in Python crashes if you are not
|
|
75
|
-
careful. None of the approaches in this chapter are immune. You have
|
|
76
|
-
to know something about the way data is handled by both NumPy and by
|
|
77
|
-
the third-party library being used.
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
Hand-generated wrappers
|
|
81
|
-
=======================
|
|
82
|
-
|
|
83
|
-
Extension modules were discussed in Chapter `1
|
|
84
|
-
<#sec-writing-an-extension>`__ . The most basic way to interface with
|
|
85
|
-
compiled code is to write an extension module and construct a module
|
|
86
|
-
method that calls the compiled code. For improved readability, your
|
|
87
|
-
method should take advantage of the PyArg_ParseTuple call to convert
|
|
88
|
-
between Python objects and C data-types. For standard C data-types
|
|
89
|
-
there is probably already a built-in converter. For others you may
|
|
90
|
-
need to write your own converter and use the "O&" format string which
|
|
91
|
-
allows you to specify a function that will be used to perform the
|
|
92
|
-
conversion from the Python object to whatever C-structures are needed.
|
|
93
|
-
|
|
94
|
-
Once the conversions to the appropriate C-structures and C data-types
|
|
95
|
-
have been performed, the next step in the wrapper is to call the
|
|
96
|
-
underlying function. This is straightforward if the underlying
|
|
97
|
-
function is in C or C++. However, in order to call Fortran code you
|
|
98
|
-
must be familiar with how Fortran subroutines are called from C/C++
|
|
99
|
-
using your compiler and platform. This can vary somewhat platforms and
|
|
100
|
-
compilers (which is another reason f2py makes life much simpler for
|
|
101
|
-
interfacing Fortran code) but generally involves underscore mangling
|
|
102
|
-
of the name and the fact that all variables are passed by reference
|
|
103
|
-
(i.e. all arguments are pointers).
|
|
104
|
-
|
|
105
|
-
The advantage of the hand-generated wrapper is that you have complete
|
|
106
|
-
control over how the C-library gets used and called which can lead to
|
|
107
|
-
a lean and tight interface with minimal over-head. The disadvantage is
|
|
108
|
-
that you have to write, debug, and maintain C-code, although most of
|
|
109
|
-
it can be adapted using the time-honored technique of
|
|
110
|
-
"cutting-pasting-and-modifying" from other extension modules. Because,
|
|
111
|
-
the procedure of calling out to additional C-code is fairly
|
|
112
|
-
regimented, code-generation procedures have been developed to make
|
|
113
|
-
this process easier. One of these code- generation techniques is
|
|
114
|
-
distributed with NumPy and allows easy integration with Fortran and
|
|
115
|
-
(simple) C code. This package, f2py, will be covered briefly in the
|
|
116
|
-
next session.
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
f2py
|
|
120
|
-
====
|
|
121
|
-
|
|
122
|
-
F2py allows you to automatically construct an extension module that
|
|
123
|
-
interfaces to routines in Fortran 77/90/95 code. It has the ability to
|
|
124
|
-
parse Fortran 77/90/95 code and automatically generate Python
|
|
125
|
-
signatures for the subroutines it encounters, or you can guide how the
|
|
126
|
-
subroutine interfaces with Python by constructing an interface-definition-file (or modifying the f2py-produced one).
|
|
127
|
-
|
|
128
|
-
.. index::
|
|
129
|
-
single: f2py
|
|
130
|
-
|
|
131
|
-
Creating source for a basic extension module
|
|
132
|
-
--------------------------------------------
|
|
133
|
-
|
|
134
|
-
Probably the easiest way to introduce f2py is to offer a simple
|
|
135
|
-
example. Here is one of the subroutines contained in a file named
|
|
136
|
-
:file:`add.f`:
|
|
137
|
-
|
|
138
|
-
.. code-block:: none
|
|
139
|
-
|
|
140
|
-
C
|
|
141
|
-
SUBROUTINE ZADD(A,B,C,N)
|
|
142
|
-
C
|
|
143
|
-
DOUBLE COMPLEX A(*)
|
|
144
|
-
DOUBLE COMPLEX B(*)
|
|
145
|
-
DOUBLE COMPLEX C(*)
|
|
146
|
-
INTEGER N
|
|
147
|
-
DO 20 J = 1, N
|
|
148
|
-
C(J) = A(J)+B(J)
|
|
149
|
-
20 CONTINUE
|
|
150
|
-
END
|
|
151
|
-
|
|
152
|
-
This routine simply adds the elements in two contiguous arrays and
|
|
153
|
-
places the result in a third. The memory for all three arrays must be
|
|
154
|
-
provided by the calling routine. A very basic interface to this
|
|
155
|
-
routine can be automatically generated by f2py::
|
|
156
|
-
|
|
157
|
-
f2py -m add add.f
|
|
158
|
-
|
|
159
|
-
You should be able to run this command assuming your search-path is
|
|
160
|
-
set-up properly. This command will produce an extension module named
|
|
161
|
-
addmodule.c in the current directory. This extension module can now be
|
|
162
|
-
compiled and used from Python just like any other extension module.
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
Creating a compiled extension module
|
|
166
|
-
------------------------------------
|
|
167
|
-
|
|
168
|
-
You can also get f2py to compile add.f and also compile its produced
|
|
169
|
-
extension module leaving only a shared-library extension file that can
|
|
170
|
-
be imported from Python::
|
|
171
|
-
|
|
172
|
-
f2py -c -m add add.f
|
|
173
|
-
|
|
174
|
-
This command leaves a file named add.{ext} in the current directory
|
|
175
|
-
(where {ext} is the appropriate extension for a python extension
|
|
176
|
-
module on your platform --- so, pyd, *etc.* ). This module may then be
|
|
177
|
-
imported from Python. It will contain a method for each subroutine in
|
|
178
|
-
add (zadd, cadd, dadd, sadd). The docstring of each method contains
|
|
179
|
-
information about how the module method may be called:
|
|
180
|
-
|
|
181
|
-
>>> import add
|
|
182
|
-
>>> print add.zadd.__doc__
|
|
183
|
-
zadd - Function signature:
|
|
184
|
-
zadd(a,b,c,n)
|
|
185
|
-
Required arguments:
|
|
186
|
-
a : input rank-1 array('D') with bounds (*)
|
|
187
|
-
b : input rank-1 array('D') with bounds (*)
|
|
188
|
-
c : input rank-1 array('D') with bounds (*)
|
|
189
|
-
n : input int
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
Improving the basic interface
|
|
193
|
-
-----------------------------
|
|
194
|
-
|
|
195
|
-
The default interface is a very literal translation of the fortran
|
|
196
|
-
code into Python. The Fortran array arguments must now be NumPy arrays
|
|
197
|
-
and the integer argument should be an integer. The interface will
|
|
198
|
-
attempt to convert all arguments to their required types (and shapes)
|
|
199
|
-
and issue an error if unsuccessful. However, because it knows nothing
|
|
200
|
-
about the semantics of the arguments (such that C is an output and n
|
|
201
|
-
should really match the array sizes), it is possible to abuse this
|
|
202
|
-
function in ways that can cause Python to crash. For example:
|
|
203
|
-
|
|
204
|
-
>>> add.zadd([1,2,3],[1,2],[3,4],1000)
|
|
205
|
-
|
|
206
|
-
will cause a program crash on most systems. Under the covers, the
|
|
207
|
-
lists are being converted to proper arrays but then the underlying add
|
|
208
|
-
loop is told to cycle way beyond the borders of the allocated memory.
|
|
209
|
-
|
|
210
|
-
In order to improve the interface, directives should be provided. This
|
|
211
|
-
is accomplished by constructing an interface definition file. It is
|
|
212
|
-
usually best to start from the interface file that f2py can produce
|
|
213
|
-
(where it gets its default behavior from). To get f2py to generate the
|
|
214
|
-
interface file use the -h option::
|
|
215
|
-
|
|
216
|
-
f2py -h add.pyf -m add add.f
|
|
217
|
-
|
|
218
|
-
This command leaves the file add.pyf in the current directory. The
|
|
219
|
-
section of this file corresponding to zadd is:
|
|
220
|
-
|
|
221
|
-
.. code-block:: none
|
|
222
|
-
|
|
223
|
-
subroutine zadd(a,b,c,n) ! in :add:add.f
|
|
224
|
-
double complex dimension(*) :: a
|
|
225
|
-
double complex dimension(*) :: b
|
|
226
|
-
double complex dimension(*) :: c
|
|
227
|
-
integer :: n
|
|
228
|
-
end subroutine zadd
|
|
229
|
-
|
|
230
|
-
By placing intent directives and checking code, the interface can be
|
|
231
|
-
cleaned up quite a bit until the Python module method is both easier
|
|
232
|
-
to use and more robust.
|
|
233
|
-
|
|
234
|
-
.. code-block:: none
|
|
235
|
-
|
|
236
|
-
subroutine zadd(a,b,c,n) ! in :add:add.f
|
|
237
|
-
double complex dimension(n) :: a
|
|
238
|
-
double complex dimension(n) :: b
|
|
239
|
-
double complex intent(out),dimension(n) :: c
|
|
240
|
-
integer intent(hide),depend(a) :: n=len(a)
|
|
241
|
-
end subroutine zadd
|
|
242
|
-
|
|
243
|
-
The intent directive, intent(out) is used to tell f2py that ``c`` is
|
|
244
|
-
an output variable and should be created by the interface before being
|
|
245
|
-
passed to the underlying code. The intent(hide) directive tells f2py
|
|
246
|
-
to not allow the user to specify the variable, ``n``, but instead to
|
|
247
|
-
get it from the size of ``a``. The depend( ``a`` ) directive is
|
|
248
|
-
necessary to tell f2py that the value of n depends on the input a (so
|
|
249
|
-
that it won't try to create the variable n until the variable a is
|
|
250
|
-
created).
|
|
251
|
-
|
|
252
|
-
After modifying ``add.pyf``, the new python module file can be generated
|
|
253
|
-
by compiling both ``add.f95`` and ``add.pyf``::
|
|
254
|
-
|
|
255
|
-
f2py -c add.pyf add.f95
|
|
256
|
-
|
|
257
|
-
The new interface has docstring:
|
|
258
|
-
|
|
259
|
-
>>> import add
|
|
260
|
-
>>> print add.zadd.__doc__
|
|
261
|
-
zadd - Function signature:
|
|
262
|
-
c = zadd(a,b)
|
|
263
|
-
Required arguments:
|
|
264
|
-
a : input rank-1 array('D') with bounds (n)
|
|
265
|
-
b : input rank-1 array('D') with bounds (n)
|
|
266
|
-
Return objects:
|
|
267
|
-
c : rank-1 array('D') with bounds (n)
|
|
268
|
-
|
|
269
|
-
Now, the function can be called in a much more robust way:
|
|
270
|
-
|
|
271
|
-
>>> add.zadd([1,2,3],[4,5,6])
|
|
272
|
-
array([ 5.+0.j, 7.+0.j, 9.+0.j])
|
|
273
|
-
|
|
274
|
-
Notice the automatic conversion to the correct format that occurred.
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
Inserting directives in Fortran source
|
|
278
|
-
--------------------------------------
|
|
279
|
-
|
|
280
|
-
The nice interface can also be generated automatically by placing the
|
|
281
|
-
variable directives as special comments in the original fortran code.
|
|
282
|
-
Thus, if I modify the source code to contain:
|
|
283
|
-
|
|
284
|
-
.. code-block:: none
|
|
285
|
-
|
|
286
|
-
C
|
|
287
|
-
SUBROUTINE ZADD(A,B,C,N)
|
|
288
|
-
C
|
|
289
|
-
CF2PY INTENT(OUT) :: C
|
|
290
|
-
CF2PY INTENT(HIDE) :: N
|
|
291
|
-
CF2PY DOUBLE COMPLEX :: A(N)
|
|
292
|
-
CF2PY DOUBLE COMPLEX :: B(N)
|
|
293
|
-
CF2PY DOUBLE COMPLEX :: C(N)
|
|
294
|
-
DOUBLE COMPLEX A(*)
|
|
295
|
-
DOUBLE COMPLEX B(*)
|
|
296
|
-
DOUBLE COMPLEX C(*)
|
|
297
|
-
INTEGER N
|
|
298
|
-
DO 20 J = 1, N
|
|
299
|
-
C(J) = A(J) + B(J)
|
|
300
|
-
20 CONTINUE
|
|
301
|
-
END
|
|
302
|
-
|
|
303
|
-
Then, I can compile the extension module using::
|
|
304
|
-
|
|
305
|
-
f2py -c -m add add.f
|
|
306
|
-
|
|
307
|
-
The resulting signature for the function add.zadd is exactly the same
|
|
308
|
-
one that was created previously. If the original source code had
|
|
309
|
-
contained A(N) instead of A(\*) and so forth with B and C, then I
|
|
310
|
-
could obtain (nearly) the same interface simply by placing the
|
|
311
|
-
INTENT(OUT) :: C comment line in the source code. The only difference
|
|
312
|
-
is that N would be an optional input that would default to the length
|
|
313
|
-
of A.
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
A filtering example
|
|
317
|
-
-------------------
|
|
318
|
-
|
|
319
|
-
For comparison with the other methods to be discussed. Here is another
|
|
320
|
-
example of a function that filters a two-dimensional array of double
|
|
321
|
-
precision floating-point numbers using a fixed averaging filter. The
|
|
322
|
-
advantage of using Fortran to index into multi-dimensional arrays
|
|
323
|
-
should be clear from this example.
|
|
324
|
-
|
|
325
|
-
.. code-block:: none
|
|
326
|
-
|
|
327
|
-
SUBROUTINE DFILTER2D(A,B,M,N)
|
|
328
|
-
C
|
|
329
|
-
DOUBLE PRECISION A(M,N)
|
|
330
|
-
DOUBLE PRECISION B(M,N)
|
|
331
|
-
INTEGER N, M
|
|
332
|
-
CF2PY INTENT(OUT) :: B
|
|
333
|
-
CF2PY INTENT(HIDE) :: N
|
|
334
|
-
CF2PY INTENT(HIDE) :: M
|
|
335
|
-
DO 20 I = 2,M-1
|
|
336
|
-
DO 40 J=2,N-1
|
|
337
|
-
B(I,J) = A(I,J) +
|
|
338
|
-
$ (A(I-1,J)+A(I+1,J) +
|
|
339
|
-
$ A(I,J-1)+A(I,J+1) )*0.5D0 +
|
|
340
|
-
$ (A(I-1,J-1) + A(I-1,J+1) +
|
|
341
|
-
$ A(I+1,J-1) + A(I+1,J+1))*0.25D0
|
|
342
|
-
40 CONTINUE
|
|
343
|
-
20 CONTINUE
|
|
344
|
-
END
|
|
345
|
-
|
|
346
|
-
This code can be compiled and linked into an extension module named
|
|
347
|
-
filter using::
|
|
348
|
-
|
|
349
|
-
f2py -c -m filter filter.f
|
|
350
|
-
|
|
351
|
-
This will produce an extension module named filter.so in the current
|
|
352
|
-
directory with a method named dfilter2d that returns a filtered
|
|
353
|
-
version of the input.
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
Calling f2py from Python
|
|
357
|
-
------------------------
|
|
358
|
-
|
|
359
|
-
The f2py program is written in Python and can be run from inside your
|
|
360
|
-
module. This provides a facility that is somewhat similar to the use
|
|
361
|
-
of weave.ext_tools described below. An example of the final interface
|
|
362
|
-
executed using Python code is:
|
|
363
|
-
|
|
364
|
-
.. code-block:: python
|
|
365
|
-
|
|
366
|
-
import numpy.f2py as f2py
|
|
367
|
-
fid = open('add.f')
|
|
368
|
-
source = fid.read()
|
|
369
|
-
fid.close()
|
|
370
|
-
f2py.compile(source, modulename='add')
|
|
371
|
-
import add
|
|
372
|
-
|
|
373
|
-
The source string can be any valid Fortran code. If you want to save
|
|
374
|
-
the extension-module source code then a suitable file-name can be
|
|
375
|
-
provided by the source_fn keyword to the compile function.
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
Automatic extension module generation
|
|
379
|
-
-------------------------------------
|
|
380
|
-
|
|
381
|
-
If you want to distribute your f2py extension module, then you only
|
|
382
|
-
need to include the .pyf file and the Fortran code. The distutils
|
|
383
|
-
extensions in NumPy allow you to define an extension module entirely
|
|
384
|
-
in terms of this interface file. A valid setup.py file allowing
|
|
385
|
-
distribution of the add.f module (as part of the package f2py_examples
|
|
386
|
-
so that it would be loaded as f2py_examples.add) is:
|
|
387
|
-
|
|
388
|
-
.. code-block:: python
|
|
389
|
-
|
|
390
|
-
def configuration(parent_package='', top_path=None)
|
|
391
|
-
from numpy.distutils.misc_util import Configuration
|
|
392
|
-
config = Configuration('f2py_examples',parent_package, top_path)
|
|
393
|
-
config.add_extension('add', sources=['add.pyf','add.f'])
|
|
394
|
-
return config
|
|
395
|
-
|
|
396
|
-
if __name__ == '__main__':
|
|
397
|
-
from numpy.distutils.core import setup
|
|
398
|
-
setup(**configuration(top_path='').todict())
|
|
399
|
-
|
|
400
|
-
Installation of the new package is easy using::
|
|
401
|
-
|
|
402
|
-
python setup.py install
|
|
403
|
-
|
|
404
|
-
assuming you have the proper permissions to write to the main site-
|
|
405
|
-
packages directory for the version of Python you are using. For the
|
|
406
|
-
resulting package to work, you need to create a file named __init__.py
|
|
407
|
-
(in the same directory as add.pyf). Notice the extension module is
|
|
408
|
-
defined entirely in terms of the "add.pyf" and "add.f" files. The
|
|
409
|
-
conversion of the .pyf file to a .c file is handled by numpy.disutils.
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
Conclusion
|
|
413
|
-
----------
|
|
414
|
-
|
|
415
|
-
The interface definition file (.pyf) is how you can fine-tune the
|
|
416
|
-
interface between Python and Fortran. There is decent documentation
|
|
417
|
-
for f2py found in the numpy/f2py/docs directory where-ever NumPy is
|
|
418
|
-
installed on your system (usually under site-packages). There is also
|
|
419
|
-
more information on using f2py (including how to use it to wrap C
|
|
420
|
-
codes) at http://www.scipy.org/Cookbook under the "Using NumPy with
|
|
421
|
-
Other Languages" heading.
|
|
422
|
-
|
|
423
|
-
The f2py method of linking compiled code is currently the most
|
|
424
|
-
sophisticated and integrated approach. It allows clean separation of
|
|
425
|
-
Python with compiled code while still allowing for separate
|
|
426
|
-
distribution of the extension module. The only draw-back is that it
|
|
427
|
-
requires the existence of a Fortran compiler in order for a user to
|
|
428
|
-
install the code. However, with the existence of the free-compilers
|
|
429
|
-
g77, gfortran, and g95, as well as high-quality commerical compilers,
|
|
430
|
-
this restriction is not particularly onerous. In my opinion, Fortran
|
|
431
|
-
is still the easiest way to write fast and clear code for scientific
|
|
432
|
-
computing. It handles complex numbers, and multi-dimensional indexing
|
|
433
|
-
in the most straightforward way. Be aware, however, that some Fortran
|
|
434
|
-
compilers will not be able to optimize code as well as good hand-
|
|
435
|
-
written C-code.
|
|
436
|
-
|
|
437
|
-
.. index::
|
|
438
|
-
single: f2py
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
weave
|
|
442
|
-
=====
|
|
443
|
-
|
|
444
|
-
Weave is a scipy package that can be used to automate the process of
|
|
445
|
-
extending Python with C/C++ code. It can be used to speed up
|
|
446
|
-
evaluation of an array expression that would otherwise create
|
|
447
|
-
temporary variables, to directly "inline" C/C++ code into Python, or
|
|
448
|
-
to create a fully-named extension module. You must either install
|
|
449
|
-
scipy or get the weave package separately and install it using the
|
|
450
|
-
standard python setup.py install. You must also have a C/C++-compiler
|
|
451
|
-
installed and useable by Python distutils in order to use weave.
|
|
452
|
-
|
|
453
|
-
.. index::
|
|
454
|
-
single: weave
|
|
455
|
-
|
|
456
|
-
Somewhat dated, but still useful documentation for weave can be found
|
|
457
|
-
at the link http://www.scipy/Weave. There are also many examples found
|
|
458
|
-
in the examples directory which is installed under the weave directory
|
|
459
|
-
in the place where weave is installed on your system.
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
Speed up code involving arrays (also see scipy.numexpr)
|
|
463
|
-
-------------------------------------------------------
|
|
464
|
-
|
|
465
|
-
This is the easiest way to use weave and requires minimal changes to
|
|
466
|
-
your Python code. It involves placing quotes around the expression of
|
|
467
|
-
interest and calling weave.blitz. Weave will parse the code and
|
|
468
|
-
generate C++ code using Blitz C++ arrays. It will then compile the
|
|
469
|
-
code and catalog the shared library so that the next time this exact
|
|
470
|
-
string is asked for (and the array types are the same), the already-
|
|
471
|
-
compiled shared library will be loaded and used. Because Blitz makes
|
|
472
|
-
extensive use of C++ templating, it can take a long time to compile
|
|
473
|
-
the first time. After that, however, the code should evaluate more
|
|
474
|
-
quickly than the equivalent NumPy expression. This is especially true
|
|
475
|
-
if your array sizes are large and the expression would require NumPy
|
|
476
|
-
to create several temporaries. Only expressions involving basic
|
|
477
|
-
arithmetic operations and basic array slicing can be converted to
|
|
478
|
-
Blitz C++ code.
|
|
479
|
-
|
|
480
|
-
For example, consider the expression::
|
|
481
|
-
|
|
482
|
-
d = 4*a + 5*a*b + 6*b*c
|
|
483
|
-
|
|
484
|
-
where a, b, and c are all arrays of the same type and shape. When the
|
|
485
|
-
data-type is double-precision and the size is 1000x1000, this
|
|
486
|
-
expression takes about 0.5 seconds to compute on an 1.1Ghz AMD Athlon
|
|
487
|
-
machine. When this expression is executed instead using blitz:
|
|
488
|
-
|
|
489
|
-
.. code-block:: python
|
|
490
|
-
|
|
491
|
-
d = empty(a.shape, 'd'); weave.blitz(expr)
|
|
492
|
-
|
|
493
|
-
execution time is only about 0.20 seconds (about 0.14 seconds spent in
|
|
494
|
-
weave and the rest in allocating space for d). Thus, we've sped up the
|
|
495
|
-
code by a factor of 2 using only a simnple command (weave.blitz). Your
|
|
496
|
-
mileage may vary, but factors of 2-8 speed-ups are possible with this
|
|
497
|
-
very simple technique.
|
|
498
|
-
|
|
499
|
-
If you are interested in using weave in this way, then you should also
|
|
500
|
-
look at scipy.numexpr which is another similar way to speed up
|
|
501
|
-
expressions by eliminating the need for temporary variables. Using
|
|
502
|
-
numexpr does not require a C/C++ compiler.
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
Inline C-code
|
|
506
|
-
-------------
|
|
507
|
-
|
|
508
|
-
Probably the most widely-used method of employing weave is to
|
|
509
|
-
"in-line" C/C++ code into Python in order to speed up a time-critical
|
|
510
|
-
section of Python code. In this method of using weave, you define a
|
|
511
|
-
string containing useful C-code and then pass it to the function
|
|
512
|
-
**weave.inline** ( ``code_string``, ``variables`` ), where
|
|
513
|
-
code_string is a string of valid C/C++ code and variables is a list of
|
|
514
|
-
variables that should be passed in from Python. The C/C++ code should
|
|
515
|
-
refer to the variables with the same names as they are defined with in
|
|
516
|
-
Python. If weave.line should return anything the the special value
|
|
517
|
-
return_val should be set to whatever object should be returned. The
|
|
518
|
-
following example shows how to use weave on basic Python objects:
|
|
519
|
-
|
|
520
|
-
.. code-block:: python
|
|
521
|
-
|
|
522
|
-
code = r"""
|
|
523
|
-
int i;
|
|
524
|
-
py::tuple results(2);
|
|
525
|
-
for (i=0; i<a.length(); i++) {
|
|
526
|
-
a[i] = i;
|
|
527
|
-
}
|
|
528
|
-
results[0] = 3.0;
|
|
529
|
-
results[1] = 4.0;
|
|
530
|
-
return_val = results;
|
|
531
|
-
"""
|
|
532
|
-
a = [None]*10
|
|
533
|
-
res = weave.inline(code,['a'])
|
|
534
|
-
|
|
535
|
-
The C++ code shown in the code string uses the name 'a' to refer to
|
|
536
|
-
the Python list that is passed in. Because the Python List is a
|
|
537
|
-
mutable type, the elements of the list itself are modified by the C++
|
|
538
|
-
code. A set of C++ classes are used to access Python objects using
|
|
539
|
-
simple syntax.
|
|
540
|
-
|
|
541
|
-
The main advantage of using C-code, however, is to speed up processing
|
|
542
|
-
on an array of data. Accessing a NumPy array in C++ code using weave,
|
|
543
|
-
depends on what kind of type converter is chosen in going from NumPy
|
|
544
|
-
arrays to C++ code. The default converter creates 5 variables for the
|
|
545
|
-
C-code for every NumPy array passed in to weave.inline. The following
|
|
546
|
-
table shows these variables which can all be used in the C++ code. The
|
|
547
|
-
table assumes that ``myvar`` is the name of the array in Python with
|
|
548
|
-
data-type {dtype} (i.e. float64, float32, int8, etc.)
|
|
549
|
-
|
|
550
|
-
=========== ============== =========================================
|
|
551
|
-
Variable Type Contents
|
|
552
|
-
=========== ============== =========================================
|
|
553
|
-
myvar {dtype}* Pointer to the first element of the array
|
|
554
|
-
Nmyvar npy_intp* A pointer to the dimensions array
|
|
555
|
-
Smyvar npy_intp* A pointer to the strides array
|
|
556
|
-
Dmyvar int The number of dimensions
|
|
557
|
-
myvar_array PyArrayObject* The entire structure for the array
|
|
558
|
-
=========== ============== =========================================
|
|
559
|
-
|
|
560
|
-
The in-lined code can contain references to any of these variables as
|
|
561
|
-
well as to the standard macros MYVAR1(i), MYVAR2(i,j), MYVAR3(i,j,k),
|
|
562
|
-
and MYVAR4(i,j,k,l). These name-based macros (they are the Python name
|
|
563
|
-
capitalized followed by the number of dimensions needed) will de-
|
|
564
|
-
reference the memory for the array at the given location with no error
|
|
565
|
-
checking (be-sure to use the correct macro and ensure the array is
|
|
566
|
-
aligned and in correct byte-swap order in order to get useful
|
|
567
|
-
results). The following code shows how you might use these variables
|
|
568
|
-
and macros to code a loop in C that computes a simple 2-d weighted
|
|
569
|
-
averaging filter.
|
|
570
|
-
|
|
571
|
-
.. code-block:: c++
|
|
572
|
-
|
|
573
|
-
int i,j;
|
|
574
|
-
for(i=1;i<Na[0]-1;i++) {
|
|
575
|
-
for(j=1;j<Na[1]-1;j++) {
|
|
576
|
-
B2(i,j) = A2(i,j) + (A2(i-1,j) +
|
|
577
|
-
A2(i+1,j)+A2(i,j-1)
|
|
578
|
-
+ A2(i,j+1))*0.5
|
|
579
|
-
+ (A2(i-1,j-1)
|
|
580
|
-
+ A2(i-1,j+1)
|
|
581
|
-
+ A2(i+1,j-1)
|
|
582
|
-
+ A2(i+1,j+1))*0.25
|
|
583
|
-
}
|
|
584
|
-
}
|
|
585
|
-
|
|
586
|
-
The above code doesn't have any error checking and so could fail with
|
|
587
|
-
a Python crash if, ``a`` had the wrong number of dimensions, or ``b``
|
|
588
|
-
did not have the same shape as ``a``. However, it could be placed
|
|
589
|
-
inside a standard Python function with the necessary error checking to
|
|
590
|
-
produce a robust but fast subroutine.
|
|
591
|
-
|
|
592
|
-
One final note about weave.inline: if you have additional code you
|
|
593
|
-
want to include in the final extension module such as supporting
|
|
594
|
-
function calls, include statements, etc. you can pass this code in as a
|
|
595
|
-
string using the keyword support_code: ``weave.inline(code, variables,
|
|
596
|
-
support_code=support)``. If you need the extension module to link
|
|
597
|
-
against an additional library then you can also pass in
|
|
598
|
-
distutils-style keyword arguments such as library_dirs, libraries,
|
|
599
|
-
and/or runtime_library_dirs which point to the appropriate libraries
|
|
600
|
-
and directories.
|
|
601
|
-
|
|
602
|
-
Simplify creation of an extension module
|
|
603
|
-
----------------------------------------
|
|
604
|
-
|
|
605
|
-
The inline function creates one extension module for each function to-
|
|
606
|
-
be inlined. It also generates a lot of intermediate code that is
|
|
607
|
-
duplicated for each extension module. If you have several related
|
|
608
|
-
codes to execute in C, it would be better to make them all separate
|
|
609
|
-
functions in a single extension module with multiple functions. You
|
|
610
|
-
can also use the tools weave provides to produce this larger extension
|
|
611
|
-
module. In fact, the weave.inline function just uses these more
|
|
612
|
-
general tools to do its work.
|
|
613
|
-
|
|
614
|
-
The approach is to:
|
|
615
|
-
|
|
616
|
-
1. construct a extension module object using
|
|
617
|
-
ext_tools.ext_module(``module_name``);
|
|
618
|
-
|
|
619
|
-
2. create function objects using ext_tools.ext_function(``func_name``,
|
|
620
|
-
``code``, ``variables``);
|
|
621
|
-
|
|
622
|
-
3. (optional) add support code to the function using the
|
|
623
|
-
.customize.add_support_code( ``support_code`` ) method of the
|
|
624
|
-
function object;
|
|
625
|
-
|
|
626
|
-
4. add the functions to the extension module object using the
|
|
627
|
-
.add_function(``func``) method;
|
|
628
|
-
|
|
629
|
-
5. when all the functions are added, compile the extension with its
|
|
630
|
-
.compile() method.
|
|
631
|
-
|
|
632
|
-
Several examples are available in the examples directory where weave
|
|
633
|
-
is installed on your system. Look particularly at ramp2.py,
|
|
634
|
-
increment_example.py and fibonacii.py
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
Conclusion
|
|
638
|
-
----------
|
|
639
|
-
|
|
640
|
-
Weave is a useful tool for quickly routines in C/C++ and linking them
|
|
641
|
-
into Python. It's caching-mechanism allows for on-the-fly compilation
|
|
642
|
-
which makes it particularly attractive for in-house code. Because of
|
|
643
|
-
the requirement that the user have a C++-compiler, it can be difficult
|
|
644
|
-
(but not impossible) to distribute a package that uses weave to other
|
|
645
|
-
users who don't have a compiler installed. Of course, weave could be
|
|
646
|
-
used to construct an extension module which is then distributed in the
|
|
647
|
-
normal way *(* using a setup.py file). While you can use weave to
|
|
648
|
-
build larger extension modules with many methods, creating methods
|
|
649
|
-
with a variable- number of arguments is not possible. Thus, for a more
|
|
650
|
-
sophisticated module, you will still probably want a Python-layer that
|
|
651
|
-
calls the weave-produced extension.
|
|
652
|
-
|
|
653
|
-
.. index::
|
|
654
|
-
single: weave
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
Pyrex
|
|
658
|
-
=====
|
|
659
|
-
|
|
660
|
-
Pyrex is a way to write C-extension modules using Python-like syntax.
|
|
661
|
-
It is an interesting way to generate extension modules that is growing
|
|
662
|
-
in popularity, particularly among people who have rusty or non-
|
|
663
|
-
existent C-skills. It does require the user to write the "interface"
|
|
664
|
-
code and so is more time-consuming than SWIG or f2py if you are trying
|
|
665
|
-
to interface to a large library of code. However, if you are writing
|
|
666
|
-
an extension module that will include quite a bit of your own
|
|
667
|
-
algorithmic code, as well, then Pyrex is a good match. A big weakness
|
|
668
|
-
perhaps is the inability to easily and quickly access the elements of
|
|
669
|
-
a multidimensional array.
|
|
670
|
-
|
|
671
|
-
.. index::
|
|
672
|
-
single: pyrex
|
|
673
|
-
|
|
674
|
-
Notice that Pyrex is an extension-module generator only. Unlike weave
|
|
675
|
-
or f2py, it includes no automatic facility for compiling and linking
|
|
676
|
-
the extension module (which must be done in the usual fashion). It
|
|
677
|
-
does provide a modified distutils class called build_ext which lets
|
|
678
|
-
you build an extension module from a .pyx source. Thus, you could
|
|
679
|
-
write in a setup.py file:
|
|
680
|
-
|
|
681
|
-
.. code-block:: python
|
|
682
|
-
|
|
683
|
-
from Pyrex.Distutils import build_ext
|
|
684
|
-
from distutils.extension import Extension
|
|
685
|
-
from distutils.core import setup
|
|
686
|
-
|
|
687
|
-
import numpy
|
|
688
|
-
py_ext = Extension('mine', ['mine.pyx'],
|
|
689
|
-
include_dirs=[numpy.get_include()])
|
|
690
|
-
|
|
691
|
-
setup(name='mine', description='Nothing',
|
|
692
|
-
ext_modules=[pyx_ext],
|
|
693
|
-
cmdclass = {'build_ext':build_ext})
|
|
694
|
-
|
|
695
|
-
Adding the NumPy include directory is, of course, only necessary if
|
|
696
|
-
you are using NumPy arrays in the extension module (which is what I
|
|
697
|
-
assume you are using Pyrex for). The distutils extensions in NumPy
|
|
698
|
-
also include support for automatically producing the extension-module
|
|
699
|
-
and linking it from a ``.pyx`` file. It works so that if the user does
|
|
700
|
-
not have Pyrex installed, then it looks for a file with the same
|
|
701
|
-
file-name but a ``.c`` extension which it then uses instead of trying
|
|
702
|
-
to produce the ``.c`` file again.
|
|
703
|
-
|
|
704
|
-
Pyrex does not natively understand NumPy arrays. However, it is not
|
|
705
|
-
difficult to include information that lets Pyrex deal with them
|
|
706
|
-
usefully. In fact, the numpy.random.mtrand module was written using
|
|
707
|
-
Pyrex so an example of Pyrex usage is already included in the NumPy
|
|
708
|
-
source distribution. That experience led to the creation of a standard
|
|
709
|
-
c_numpy.pxd file that you can use to simplify interacting with NumPy
|
|
710
|
-
array objects in a Pyrex-written extension. The file may not be
|
|
711
|
-
complete (it wasn't at the time of this writing). If you have
|
|
712
|
-
additions you'd like to contribute, please send them. The file is
|
|
713
|
-
located in the .../site-packages/numpy/doc/pyrex directory where you
|
|
714
|
-
have Python installed. There is also an example in that directory of
|
|
715
|
-
using Pyrex to construct a simple extension module. It shows that
|
|
716
|
-
Pyrex looks a lot like Python but also contains some new syntax that
|
|
717
|
-
is necessary in order to get C-like speed.
|
|
718
|
-
|
|
719
|
-
If you just use Pyrex to compile a standard Python module, then you
|
|
720
|
-
will get a C-extension module that runs either as fast or, possibly,
|
|
721
|
-
more slowly than the equivalent Python module. Speed increases are
|
|
722
|
-
possible only when you use cdef to statically define C variables and
|
|
723
|
-
use a special construct to create for loops:
|
|
724
|
-
|
|
725
|
-
.. code-block:: none
|
|
726
|
-
|
|
727
|
-
cdef int i
|
|
728
|
-
for i from start <= i < stop
|
|
729
|
-
|
|
730
|
-
Let's look at two examples we've seen before to see how they might be
|
|
731
|
-
implemented using Pyrex. These examples were compiled into extension
|
|
732
|
-
modules using Pyrex-0.9.3.1.
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
Pyrex-add
|
|
736
|
-
---------
|
|
737
|
-
|
|
738
|
-
Here is part of a Pyrex-file I named add.pyx which implements the add
|
|
739
|
-
functions we previously implemented using f2py:
|
|
740
|
-
|
|
741
|
-
.. code-block:: none
|
|
742
|
-
|
|
743
|
-
cimport c_numpy
|
|
744
|
-
from c_numpy cimport import_array, ndarray, npy_intp, npy_cdouble, \
|
|
745
|
-
npy_cfloat, NPY_DOUBLE, NPY_CDOUBLE, NPY_FLOAT, \
|
|
746
|
-
NPY_CFLOAT
|
|
747
|
-
|
|
748
|
-
#We need to initialize NumPy
|
|
749
|
-
import_array()
|
|
750
|
-
|
|
751
|
-
def zadd(object ao, object bo):
|
|
752
|
-
cdef ndarray c, a, b
|
|
753
|
-
cdef npy_intp i
|
|
754
|
-
a = c_numpy.PyArray_ContiguousFromAny(ao,
|
|
755
|
-
NPY_CDOUBLE, 1, 1)
|
|
756
|
-
b = c_numpy.PyArray_ContiguousFromAny(bo,
|
|
757
|
-
NPY_CDOUBLE, 1, 1)
|
|
758
|
-
c = c_numpy.PyArray_SimpleNew(a.nd, a.dimensions,
|
|
759
|
-
a.descr.type_num)
|
|
760
|
-
for i from 0 <= i < a.dimensions[0]:
|
|
761
|
-
(<npy_cdouble *>c.data)[i].real = \
|
|
762
|
-
(<npy_cdouble *>a.data)[i].real + \
|
|
763
|
-
(<npy_cdouble *>b.data)[i].real
|
|
764
|
-
(<npy_cdouble *>c.data)[i].imag = \
|
|
765
|
-
(<npy_cdouble *>a.data)[i].imag + \
|
|
766
|
-
(<npy_cdouble *>b.data)[i].imag
|
|
767
|
-
return c
|
|
768
|
-
|
|
769
|
-
This module shows use of the ``cimport`` statement to load the
|
|
770
|
-
definitions from the c_numpy.pxd file. As shown, both versions of the
|
|
771
|
-
import statement are supported. It also shows use of the NumPy C-API
|
|
772
|
-
to construct NumPy arrays from arbitrary input objects. The array c is
|
|
773
|
-
created using PyArray_SimpleNew. Then the c-array is filled by
|
|
774
|
-
addition. Casting to a particiular data-type is accomplished using
|
|
775
|
-
<cast \*>. Pointers are de-referenced with bracket notation and
|
|
776
|
-
members of structures are accessed using '.' notation even if the
|
|
777
|
-
object is techinically a pointer to a structure. The use of the
|
|
778
|
-
special for loop construct ensures that the underlying code will have
|
|
779
|
-
a similar C-loop so the addition calculation will proceed quickly.
|
|
780
|
-
Notice that we have not checked for NULL after calling to the C-API
|
|
781
|
-
--- a cardinal sin when writing C-code. For routines that return
|
|
782
|
-
Python objects, Pyrex inserts the checks for NULL into the C-code for
|
|
783
|
-
you and returns with failure if need be. There is also a way to get
|
|
784
|
-
Pyrex to automatically check for exceptions when you call functions
|
|
785
|
-
that don't return Python objects. See the documentation of Pyrex for
|
|
786
|
-
details.
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
Pyrex-filter
|
|
790
|
-
------------
|
|
791
|
-
|
|
792
|
-
The two-dimensional example we created using weave is a bit uglier to
|
|
793
|
-
implement in Pyrex because two-dimensional indexing using Pyrex is not
|
|
794
|
-
as simple. But, it is straightforward (and possibly faster because of
|
|
795
|
-
pre-computed indices). Here is the Pyrex-file I named image.pyx.
|
|
796
|
-
|
|
797
|
-
.. code-block:: none
|
|
798
|
-
|
|
799
|
-
cimport c_numpy
|
|
800
|
-
from c_numpy cimport import_array, ndarray, npy_intp,\
|
|
801
|
-
NPY_DOUBLE, NPY_CDOUBLE, \
|
|
802
|
-
NPY_FLOAT, NPY_CFLOAT, NPY_ALIGNED \
|
|
803
|
-
|
|
804
|
-
#We need to initialize NumPy
|
|
805
|
-
import_array()
|
|
806
|
-
def filter(object ao):
|
|
807
|
-
cdef ndarray a, b
|
|
808
|
-
cdef npy_intp i, j, M, N, oS
|
|
809
|
-
cdef npy_intp r,rm1,rp1,c,cm1,cp1
|
|
810
|
-
cdef double value
|
|
811
|
-
# Require an ALIGNED array
|
|
812
|
-
# (but not necessarily contiguous)
|
|
813
|
-
# We will use strides to access the elements.
|
|
814
|
-
a = c_numpy.PyArray_FROMANY(ao, NPY_DOUBLE, \
|
|
815
|
-
2, 2, NPY_ALIGNED)
|
|
816
|
-
b = c_numpy.PyArray_SimpleNew(a.nd,a.dimensions, \
|
|
817
|
-
a.descr.type_num)
|
|
818
|
-
M = a.dimensions[0]
|
|
819
|
-
N = a.dimensions[1]
|
|
820
|
-
S0 = a.strides[0]
|
|
821
|
-
S1 = a.strides[1]
|
|
822
|
-
for i from 1 <= i < M-1:
|
|
823
|
-
r = i*S0
|
|
824
|
-
rm1 = r-S0
|
|
825
|
-
rp1 = r+S0
|
|
826
|
-
oS = i*N
|
|
827
|
-
for j from 1 <= j < N-1:
|
|
828
|
-
c = j*S1
|
|
829
|
-
cm1 = c-S1
|
|
830
|
-
cp1 = c+S1
|
|
831
|
-
(<double *>b.data)[oS+j] = \
|
|
832
|
-
(<double *>(a.data+r+c))[0] + \
|
|
833
|
-
((<double *>(a.data+rm1+c))[0] + \
|
|
834
|
-
(<double *>(a.data+rp1+c))[0] + \
|
|
835
|
-
(<double *>(a.data+r+cm1))[0] + \
|
|
836
|
-
(<double *>(a.data+r+cp1))[0])*0.5 + \
|
|
837
|
-
((<double *>(a.data+rm1+cm1))[0] + \
|
|
838
|
-
(<double *>(a.data+rp1+cm1))[0] + \
|
|
839
|
-
(<double *>(a.data+rp1+cp1))[0] + \
|
|
840
|
-
(<double *>(a.data+rm1+cp1))[0])*0.25
|
|
841
|
-
return b
|
|
842
|
-
|
|
843
|
-
This 2-d averaging filter runs quickly because the loop is in C and
|
|
844
|
-
the pointer computations are done only as needed. However, it is not
|
|
845
|
-
particularly easy to understand what is happening. A 2-d image, ``in``
|
|
846
|
-
, can be filtered using this code very quickly using:
|
|
847
|
-
|
|
848
|
-
.. code-block:: python
|
|
849
|
-
|
|
850
|
-
import image
|
|
851
|
-
out = image.filter(in)
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
Conclusion
|
|
855
|
-
----------
|
|
856
|
-
|
|
857
|
-
There are several disadvantages of using Pyrex:
|
|
858
|
-
|
|
859
|
-
1. The syntax for Pyrex can get a bit bulky, and it can be confusing at
|
|
860
|
-
first to understand what kind of objects you are getting and how to
|
|
861
|
-
interface them with C-like constructs.
|
|
862
|
-
|
|
863
|
-
2. Inappropriate Pyrex syntax or incorrect calls to C-code or type-
|
|
864
|
-
mismatches can result in failures such as
|
|
865
|
-
|
|
866
|
-
1. Pyrex failing to generate the extension module source code,
|
|
867
|
-
|
|
868
|
-
2. Compiler failure while generating the extension module binary due to
|
|
869
|
-
incorrect C syntax,
|
|
870
|
-
|
|
871
|
-
3. Python failure when trying to use the module.
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
3. It is easy to lose a clean separation between Python and C which makes
|
|
875
|
-
re-using your C-code for other non-Python-related projects more
|
|
876
|
-
difficult.
|
|
877
|
-
|
|
878
|
-
4. Multi-dimensional arrays are "bulky" to index (appropriate macros
|
|
879
|
-
may be able to fix this).
|
|
880
|
-
|
|
881
|
-
5. The C-code generated by Pyrex is hard to read and modify (and typically
|
|
882
|
-
compiles with annoying but harmless warnings).
|
|
883
|
-
|
|
884
|
-
Writing a good Pyrex extension module still takes a bit of effort
|
|
885
|
-
because not only does it require (a little) familiarity with C, but
|
|
886
|
-
also with Pyrex's brand of Python-mixed-with C. One big advantage of
|
|
887
|
-
Pyrex-generated extension modules is that they are easy to distribute
|
|
888
|
-
using distutils. In summary, Pyrex is a very capable tool for either
|
|
889
|
-
gluing C-code or generating an extension module quickly and should not
|
|
890
|
-
be over-looked. It is especially useful for people that can't or won't
|
|
891
|
-
write C-code or Fortran code. But, if you are already able to write
|
|
892
|
-
simple subroutines in C or Fortran, then I would use one of the other
|
|
893
|
-
approaches such as f2py (for Fortran), ctypes (for C shared-
|
|
894
|
-
libraries), or weave (for inline C-code).
|
|
895
|
-
|
|
896
|
-
.. index::
|
|
897
|
-
single: pyrex
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
ctypes
|
|
903
|
-
======
|
|
904
|
-
|
|
905
|
-
Ctypes is a python extension module (downloaded separately for Python
|
|
906
|
-
<2.5 and included with Python 2.5) that allows you to call an
|
|
907
|
-
arbitrary function in a shared library directly from Python. This
|
|
908
|
-
approach allows you to interface with C-code directly from Python.
|
|
909
|
-
This opens up an enormous number of libraries for use from Python. The
|
|
910
|
-
drawback, however, is that coding mistakes can lead to ugly program
|
|
911
|
-
crashes very easily (just as can happen in C) because there is little
|
|
912
|
-
type or bounds checking done on the parameters. This is especially
|
|
913
|
-
true when array data is passed in as a pointer to a raw memory
|
|
914
|
-
location. The responsibility is then on you that the subroutine will
|
|
915
|
-
not access memory outside the actual array area. But, if you don't
|
|
916
|
-
mind living a little dangerously ctypes can be an effective tool for
|
|
917
|
-
quickly taking advantage of a large shared library (or writing
|
|
918
|
-
extended functionality in your own shared library).
|
|
919
|
-
|
|
920
|
-
.. index::
|
|
921
|
-
single: ctypes
|
|
922
|
-
|
|
923
|
-
Because the ctypes approach exposes a raw interface to the compiled
|
|
924
|
-
code it is not always tolerant of user mistakes. Robust use of the
|
|
925
|
-
ctypes module typically involves an additional layer of Python code in
|
|
926
|
-
order to check the data types and array bounds of objects passed to
|
|
927
|
-
the underlying subroutine. This additional layer of checking (not to
|
|
928
|
-
mention the conversion from ctypes objects to C-data-types that ctypes
|
|
929
|
-
itself performs), will make the interface slower than a hand-written
|
|
930
|
-
extension-module interface. However, this overhead should be neglible
|
|
931
|
-
if the C-routine being called is doing any significant amount of work.
|
|
932
|
-
If you are a great Python programmer with weak C-skills, ctypes is an
|
|
933
|
-
easy way to write a useful interface to a (shared) library of compiled
|
|
934
|
-
code.
|
|
935
|
-
|
|
936
|
-
To use c-types you must
|
|
937
|
-
|
|
938
|
-
1. Have a shared library.
|
|
939
|
-
|
|
940
|
-
2. Load the shared library.
|
|
941
|
-
|
|
942
|
-
3. Convert the python objects to ctypes-understood arguments.
|
|
943
|
-
|
|
944
|
-
4. Call the function from the library with the ctypes arguments.
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
Having a shared library
|
|
948
|
-
-----------------------
|
|
949
|
-
|
|
950
|
-
There are several requirements for a shared library that can be used
|
|
951
|
-
with c-types that are platform specific. This guide assumes you have
|
|
952
|
-
some familiarity with making a shared library on your system (or
|
|
953
|
-
simply have a shared library available to you). Items to remember are:
|
|
954
|
-
|
|
955
|
-
- A shared library must be compiled in a special way ( *e.g.* using
|
|
956
|
-
the -shared flag with gcc).
|
|
957
|
-
|
|
958
|
-
- On some platforms (*e.g.* Windows) , a shared library requires a
|
|
959
|
-
.def file that specifies the functions to be exported. For example a
|
|
960
|
-
mylib.def file might contain.
|
|
961
|
-
|
|
962
|
-
::
|
|
963
|
-
|
|
964
|
-
LIBRARY mylib.dll
|
|
965
|
-
EXPORTS
|
|
966
|
-
cool_function1
|
|
967
|
-
cool_function2
|
|
968
|
-
|
|
969
|
-
Alternatively, you may be able to use the storage-class specifier
|
|
970
|
-
__declspec(dllexport) in the C-definition of the function to avoid the
|
|
971
|
-
need for this .def file.
|
|
972
|
-
|
|
973
|
-
There is no standard way in Python distutils to create a standard
|
|
974
|
-
shared library (an extension module is a "special" shared library
|
|
975
|
-
Python understands) in a cross-platform manner. Thus, a big
|
|
976
|
-
disadvantage of ctypes at the time of writing this book is that it is
|
|
977
|
-
difficult to distribute in a cross-platform manner a Python extension
|
|
978
|
-
that uses c-types and includes your own code which should be compiled
|
|
979
|
-
as a shared library on the users system.
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
Loading the shared library
|
|
983
|
-
--------------------------
|
|
984
|
-
|
|
985
|
-
A simple, but robust way to load the shared library is to get the
|
|
986
|
-
absolute path name and load it using the cdll object of ctypes.:
|
|
987
|
-
|
|
988
|
-
.. code-block:: python
|
|
989
|
-
|
|
990
|
-
lib = ctypes.cdll[<full_path_name>]
|
|
991
|
-
|
|
992
|
-
However, on Windows accessing an attribute of the cdll method will
|
|
993
|
-
load the first DLL by that name found in the current directory or on
|
|
994
|
-
the PATH. Loading the absolute path name requires a little finesse for
|
|
995
|
-
cross-platform work since the extension of shared libraries varies.
|
|
996
|
-
There is a ``ctypes.util.find_library`` utility available that can
|
|
997
|
-
simplify the process of finding the library to load but it is not
|
|
998
|
-
foolproof. Complicating matters, different platforms have different
|
|
999
|
-
default extensions used by shared libraries (e.g. .dll -- Windows, .so
|
|
1000
|
-
-- Linux, .dylib -- Mac OS X). This must also be taken into account if
|
|
1001
|
-
you are using c-types to wrap code that needs to work on several
|
|
1002
|
-
platforms.
|
|
1003
|
-
|
|
1004
|
-
NumPy provides a convenience function called
|
|
1005
|
-
:func:`ctypeslib.load_library` (name, path). This function takes the name
|
|
1006
|
-
of the shared library (including any prefix like 'lib' but excluding
|
|
1007
|
-
the extension) and a path where the shared library can be located. It
|
|
1008
|
-
returns a ctypes library object or raises an OSError if the library
|
|
1009
|
-
cannot be found or raises an ImportError if the ctypes module is not
|
|
1010
|
-
available. (Windows users: the ctypes library object loaded using
|
|
1011
|
-
:func:`load_library` is always loaded assuming cdecl calling convention.
|
|
1012
|
-
See the ctypes documentation under ctypes.windll and/or ctypes.oledll
|
|
1013
|
-
for ways to load libraries under other calling conventions).
|
|
1014
|
-
|
|
1015
|
-
The functions in the shared library are available as attributes of the
|
|
1016
|
-
ctypes library object (returned from :func:`ctypeslib.load_library`) or
|
|
1017
|
-
as items using ``lib['func_name']`` syntax. The latter method for
|
|
1018
|
-
retrieving a function name is particularly useful if the function name
|
|
1019
|
-
contains characters that are not allowable in Python variable names.
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
Converting arguments
|
|
1023
|
-
--------------------
|
|
1024
|
-
|
|
1025
|
-
Python ints/longs, strings, and unicode objects are automatically
|
|
1026
|
-
converted as needed to equivalent c-types arguments The None object is
|
|
1027
|
-
also converted automatically to a NULL pointer. All other Python
|
|
1028
|
-
objects must be converted to ctypes-specific types. There are two ways
|
|
1029
|
-
around this restriction that allow c-types to integrate with other
|
|
1030
|
-
objects.
|
|
1031
|
-
|
|
1032
|
-
1. Don't set the argtypes attribute of the function object and define an
|
|
1033
|
-
:obj:`_as_parameter_` method for the object you want to pass in. The
|
|
1034
|
-
:obj:`_as_parameter_` method must return a Python int which will be passed
|
|
1035
|
-
directly to the function.
|
|
1036
|
-
|
|
1037
|
-
2. Set the argtypes attribute to a list whose entries contain objects
|
|
1038
|
-
with a classmethod named from_param that knows how to convert your
|
|
1039
|
-
object to an object that ctypes can understand (an int/long, string,
|
|
1040
|
-
unicode, or object with the :obj:`_as_parameter_` attribute).
|
|
1041
|
-
|
|
1042
|
-
NumPy uses both methods with a preference for the second method
|
|
1043
|
-
because it can be safer. The ctypes attribute of the ndarray returns
|
|
1044
|
-
an object that has an _as_parameter\_ attribute which returns an
|
|
1045
|
-
integer representing the address of the ndarray to which it is
|
|
1046
|
-
associated. As a result, one can pass this ctypes attribute object
|
|
1047
|
-
directly to a function expecting a pointer to the data in your
|
|
1048
|
-
ndarray. The caller must be sure that the ndarray object is of the
|
|
1049
|
-
correct type, shape, and has the correct flags set or risk nasty
|
|
1050
|
-
crashes if the data-pointer to inappropriate arrays are passsed in.
|
|
1051
|
-
|
|
1052
|
-
To implement the second method, NumPy provides the class-factory
|
|
1053
|
-
function :func:`ndpointer` in the :mod:`ctypeslib` module. This
|
|
1054
|
-
class-factory function produces an appropriate class that can be
|
|
1055
|
-
placed in an argtypes attribute entry of a ctypes function. The class
|
|
1056
|
-
will contain a from_param method which ctypes will use to convert any
|
|
1057
|
-
ndarray passed in to the function to a ctypes-recognized object. In
|
|
1058
|
-
the process, the conversion will perform checking on any properties of
|
|
1059
|
-
the ndarray that were specified by the user in the call to :func:`ndpointer`.
|
|
1060
|
-
Aspects of the ndarray that can be checked include the data-type, the
|
|
1061
|
-
number-of-dimensions, the shape, and/or the state of the flags on any
|
|
1062
|
-
array passed. The return value of the from_param method is the ctypes
|
|
1063
|
-
attribute of the array which (because it contains the _as_parameter\_
|
|
1064
|
-
attribute pointing to the array data area) can be used by ctypes
|
|
1065
|
-
directly.
|
|
1066
|
-
|
|
1067
|
-
The ctypes attribute of an ndarray is also endowed with additional
|
|
1068
|
-
attributes that may be convenient when passing additional information
|
|
1069
|
-
about the array into a ctypes function. The attributes **data**,
|
|
1070
|
-
**shape**, and **strides** can provide c-types compatible types
|
|
1071
|
-
corresponding to the data-area, the shape, and the strides of the
|
|
1072
|
-
array. The data attribute reutrns a ``c_void_p`` representing a
|
|
1073
|
-
pointer to the data area. The shape and strides attributes each return
|
|
1074
|
-
an array of ctypes integers (or None representing a NULL pointer, if a
|
|
1075
|
-
0-d array). The base ctype of the array is a ctype integer of the same
|
|
1076
|
-
size as a pointer on the platform. There are also methods
|
|
1077
|
-
data_as({ctype}), shape_as(<base ctype>), and strides_as(<base
|
|
1078
|
-
ctype>). These return the data as a ctype object of your choice and
|
|
1079
|
-
the shape/strides arrays using an underlying base type of your choice.
|
|
1080
|
-
For convenience, the **ctypeslib** module also contains **c_intp** as
|
|
1081
|
-
a ctypes integer data-type whose size is the same as the size of
|
|
1082
|
-
``c_void_p`` on the platform (it's value is None if ctypes is not
|
|
1083
|
-
installed).
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
Calling the function
|
|
1087
|
-
--------------------
|
|
1088
|
-
|
|
1089
|
-
The function is accessed as an attribute of or an item from the loaded
|
|
1090
|
-
shared-library. Thus, if "./mylib.so" has a function named
|
|
1091
|
-
"cool_function1" , I could access this function either as:
|
|
1092
|
-
|
|
1093
|
-
.. code-block:: python
|
|
1094
|
-
|
|
1095
|
-
lib = numpy.ctypeslib.load_library('mylib','.')
|
|
1096
|
-
func1 = lib.cool_function1 # or equivalently
|
|
1097
|
-
func1 = lib['cool_function1']
|
|
1098
|
-
|
|
1099
|
-
In ctypes, the return-value of a function is set to be 'int' by
|
|
1100
|
-
default. This behavior can be changed by setting the restype attribute
|
|
1101
|
-
of the function. Use None for the restype if the function has no
|
|
1102
|
-
return value ('void'):
|
|
1103
|
-
|
|
1104
|
-
.. code-block:: python
|
|
1105
|
-
|
|
1106
|
-
func1.restype = None
|
|
1107
|
-
|
|
1108
|
-
As previously discussed, you can also set the argtypes attribute of
|
|
1109
|
-
the function in order to have ctypes check the types of the input
|
|
1110
|
-
arguments when the function is called. Use the :func:`ndpointer` factory
|
|
1111
|
-
function to generate a ready-made class for data-type, shape, and
|
|
1112
|
-
flags checking on your new function. The :func:`ndpointer` function has the
|
|
1113
|
-
signature
|
|
1114
|
-
|
|
1115
|
-
.. function:: ndpointer(dtype=None, ndim=None, shape=None, flags=None)
|
|
1116
|
-
|
|
1117
|
-
Keyword arguments with the value ``None`` are not checked.
|
|
1118
|
-
Specifying a keyword enforces checking of that aspect of the
|
|
1119
|
-
ndarray on conversion to a ctypes-compatible object. The dtype
|
|
1120
|
-
keyword can be any object understood as a data-type object. The
|
|
1121
|
-
ndim keyword should be an integer, and the shape keyword should be
|
|
1122
|
-
an integer or a sequence of integers. The flags keyword specifies
|
|
1123
|
-
the minimal flags that are required on any array passed in. This
|
|
1124
|
-
can be specified as a string of comma separated requirements, an
|
|
1125
|
-
integer indicating the requirement bits OR'd together, or a flags
|
|
1126
|
-
object returned from the flags attribute of an array with the
|
|
1127
|
-
necessary requirements.
|
|
1128
|
-
|
|
1129
|
-
Using an ndpointer class in the argtypes method can make it
|
|
1130
|
-
significantly safer to call a C-function using ctypes and the data-
|
|
1131
|
-
area of an ndarray. You may still want to wrap the function in an
|
|
1132
|
-
additional Python wrapper to make it user-friendly (hiding some
|
|
1133
|
-
obvious arguments and making some arguments output arguments). In this
|
|
1134
|
-
process, the **requires** function in NumPy may be useful to return the right
|
|
1135
|
-
kind of array from a given input.
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
Complete example
|
|
1139
|
-
----------------
|
|
1140
|
-
|
|
1141
|
-
In this example, I will show how the addition function and the filter
|
|
1142
|
-
function implemented previously using the other approaches can be
|
|
1143
|
-
implemented using ctypes. First, the C-code which implements the
|
|
1144
|
-
algorithms contains the functions zadd, dadd, sadd, cadd, and
|
|
1145
|
-
dfilter2d. The zadd function is:
|
|
1146
|
-
|
|
1147
|
-
.. code-block:: c
|
|
1148
|
-
|
|
1149
|
-
/* Add arrays of contiguous data */
|
|
1150
|
-
typedef struct {double real; double imag;} cdouble;
|
|
1151
|
-
typedef struct {float real; float imag;} cfloat;
|
|
1152
|
-
void zadd(cdouble *a, cdouble *b, cdouble *c, long n)
|
|
1153
|
-
{
|
|
1154
|
-
while (n--) {
|
|
1155
|
-
c->real = a->real + b->real;
|
|
1156
|
-
c->imag = a->imag + b->imag;
|
|
1157
|
-
a++; b++; c++;
|
|
1158
|
-
}
|
|
1159
|
-
}
|
|
1160
|
-
|
|
1161
|
-
with similar code for cadd, dadd, and sadd that handles complex float,
|
|
1162
|
-
double, and float data-types, respectively:
|
|
1163
|
-
|
|
1164
|
-
.. code-block:: c
|
|
1165
|
-
|
|
1166
|
-
void cadd(cfloat *a, cfloat *b, cfloat *c, long n)
|
|
1167
|
-
{
|
|
1168
|
-
while (n--) {
|
|
1169
|
-
c->real = a->real + b->real;
|
|
1170
|
-
c->imag = a->imag + b->imag;
|
|
1171
|
-
a++; b++; c++;
|
|
1172
|
-
}
|
|
1173
|
-
}
|
|
1174
|
-
void dadd(double *a, double *b, double *c, long n)
|
|
1175
|
-
{
|
|
1176
|
-
while (n--) {
|
|
1177
|
-
*c++ = *a++ + *b++;
|
|
1178
|
-
}
|
|
1179
|
-
}
|
|
1180
|
-
void sadd(float *a, float *b, float *c, long n)
|
|
1181
|
-
{
|
|
1182
|
-
while (n--) {
|
|
1183
|
-
*c++ = *a++ + *b++;
|
|
1184
|
-
}
|
|
1185
|
-
}
|
|
1186
|
-
|
|
1187
|
-
The code.c file also contains the function dfilter2d:
|
|
1188
|
-
|
|
1189
|
-
.. code-block:: c
|
|
1190
|
-
|
|
1191
|
-
/* Assumes b is contiguous and
|
|
1192
|
-
a has strides that are multiples of sizeof(double)
|
|
1193
|
-
*/
|
|
1194
|
-
void
|
|
1195
|
-
dfilter2d(double *a, double *b, int *astrides, int *dims)
|
|
1196
|
-
{
|
|
1197
|
-
int i, j, M, N, S0, S1;
|
|
1198
|
-
int r, c, rm1, rp1, cp1, cm1;
|
|
1199
|
-
|
|
1200
|
-
M = dims[0]; N = dims[1];
|
|
1201
|
-
S0 = astrides[0]/sizeof(double);
|
|
1202
|
-
S1=astrides[1]/sizeof(double);
|
|
1203
|
-
for (i=1; i<M-1; i++) {
|
|
1204
|
-
r = i*S0; rp1 = r+S0; rm1 = r-S0;
|
|
1205
|
-
for (j=1; j<N-1; j++) {
|
|
1206
|
-
c = j*S1; cp1 = j+S1; cm1 = j-S1;
|
|
1207
|
-
b[i*N+j] = a[r+c] + \
|
|
1208
|
-
(a[rp1+c] + a[rm1+c] + \
|
|
1209
|
-
a[r+cp1] + a[r+cm1])*0.5 + \
|
|
1210
|
-
(a[rp1+cp1] + a[rp1+cm1] + \
|
|
1211
|
-
a[rm1+cp1] + a[rm1+cp1])*0.25;
|
|
1212
|
-
}
|
|
1213
|
-
}
|
|
1214
|
-
}
|
|
1215
|
-
|
|
1216
|
-
A possible advantage this code has over the Fortran-equivalent code is
|
|
1217
|
-
that it takes arbitrarily strided (i.e. non-contiguous arrays) and may
|
|
1218
|
-
also run faster depending on the optimization capability of your
|
|
1219
|
-
compiler. But, it is a obviously more complicated than the simple code
|
|
1220
|
-
in filter.f. This code must be compiled into a shared library. On my
|
|
1221
|
-
Linux system this is accomplished using::
|
|
1222
|
-
|
|
1223
|
-
gcc -o code.so -shared code.c
|
|
1224
|
-
|
|
1225
|
-
Which creates a shared_library named code.so in the current directory.
|
|
1226
|
-
On Windows don't forget to either add __declspec(dllexport) in front
|
|
1227
|
-
of void on the line preceeding each function definition, or write a
|
|
1228
|
-
code.def file that lists the names of the functions to be exported.
|
|
1229
|
-
|
|
1230
|
-
A suitable Python interface to this shared library should be
|
|
1231
|
-
constructed. To do this create a file named interface.py with the
|
|
1232
|
-
following lines at the top:
|
|
1233
|
-
|
|
1234
|
-
.. code-block:: python
|
|
1235
|
-
|
|
1236
|
-
__all__ = ['add', 'filter2d']
|
|
1237
|
-
|
|
1238
|
-
import numpy as N
|
|
1239
|
-
import os
|
|
1240
|
-
|
|
1241
|
-
_path = os.path.dirname('__file__')
|
|
1242
|
-
lib = N.ctypeslib.load_library('code', _path)
|
|
1243
|
-
_typedict = {'zadd' : complex, 'sadd' : N.single,
|
|
1244
|
-
'cadd' : N.csingle, 'dadd' : float}
|
|
1245
|
-
for name in _typedict.keys():
|
|
1246
|
-
val = getattr(lib, name)
|
|
1247
|
-
val.restype = None
|
|
1248
|
-
_type = _typedict[name]
|
|
1249
|
-
val.argtypes = [N.ctypeslib.ndpointer(_type,
|
|
1250
|
-
flags='aligned, contiguous'),
|
|
1251
|
-
N.ctypeslib.ndpointer(_type,
|
|
1252
|
-
flags='aligned, contiguous'),
|
|
1253
|
-
N.ctypeslib.ndpointer(_type,
|
|
1254
|
-
flags='aligned, contiguous,'\
|
|
1255
|
-
'writeable'),
|
|
1256
|
-
N.ctypeslib.c_intp]
|
|
1257
|
-
|
|
1258
|
-
This code loads the shared library named code.{ext} located in the
|
|
1259
|
-
same path as this file. It then adds a return type of void to the
|
|
1260
|
-
functions contained in the library. It also adds argument checking to
|
|
1261
|
-
the functions in the library so that ndarrays can be passed as the
|
|
1262
|
-
first three arguments along with an integer (large enough to hold a
|
|
1263
|
-
pointer on the platform) as the fourth argument.
|
|
1264
|
-
|
|
1265
|
-
Setting up the filtering function is similar and allows the filtering
|
|
1266
|
-
function to be called with ndarray arguments as the first two
|
|
1267
|
-
arguments and with pointers to integers (large enough to handle the
|
|
1268
|
-
strides and shape of an ndarray) as the last two arguments.:
|
|
1269
|
-
|
|
1270
|
-
.. code-block:: python
|
|
1271
|
-
|
|
1272
|
-
lib.dfilter2d.restype=None
|
|
1273
|
-
lib.dfilter2d.argtypes = [N.ctypeslib.ndpointer(float, ndim=2,
|
|
1274
|
-
flags='aligned'),
|
|
1275
|
-
N.ctypeslib.ndpointer(float, ndim=2,
|
|
1276
|
-
flags='aligned, contiguous,'\
|
|
1277
|
-
'writeable'),
|
|
1278
|
-
ctypes.POINTER(N.ctypeslib.c_intp),
|
|
1279
|
-
ctypes.POINTER(N.ctypeslib.c_intp)]
|
|
1280
|
-
|
|
1281
|
-
Next, define a simple selection function that chooses which addition
|
|
1282
|
-
function to call in the shared library based on the data-type:
|
|
1283
|
-
|
|
1284
|
-
.. code-block:: python
|
|
1285
|
-
|
|
1286
|
-
def select(dtype):
|
|
1287
|
-
if dtype.char in ['?bBhHf']:
|
|
1288
|
-
return lib.sadd, single
|
|
1289
|
-
elif dtype.char in ['F']:
|
|
1290
|
-
return lib.cadd, csingle
|
|
1291
|
-
elif dtype.char in ['DG']:
|
|
1292
|
-
return lib.zadd, complex
|
|
1293
|
-
else:
|
|
1294
|
-
return lib.dadd, float
|
|
1295
|
-
return func, ntype
|
|
1296
|
-
|
|
1297
|
-
Finally, the two functions to be exported by the interface can be
|
|
1298
|
-
written simply as:
|
|
1299
|
-
|
|
1300
|
-
.. code-block:: python
|
|
1301
|
-
|
|
1302
|
-
def add(a, b):
|
|
1303
|
-
requires = ['CONTIGUOUS', 'ALIGNED']
|
|
1304
|
-
a = N.asanyarray(a)
|
|
1305
|
-
func, dtype = select(a.dtype)
|
|
1306
|
-
a = N.require(a, dtype, requires)
|
|
1307
|
-
b = N.require(b, dtype, requires)
|
|
1308
|
-
c = N.empty_like(a)
|
|
1309
|
-
func(a,b,c,a.size)
|
|
1310
|
-
return c
|
|
1311
|
-
|
|
1312
|
-
and:
|
|
1313
|
-
|
|
1314
|
-
.. code-block:: python
|
|
1315
|
-
|
|
1316
|
-
def filter2d(a):
|
|
1317
|
-
a = N.require(a, float, ['ALIGNED'])
|
|
1318
|
-
b = N.zeros_like(a)
|
|
1319
|
-
lib.dfilter2d(a, b, a.ctypes.strides, a.ctypes.shape)
|
|
1320
|
-
return b
|
|
1321
|
-
|
|
1322
|
-
|
|
1323
|
-
Conclusion
|
|
1324
|
-
----------
|
|
1325
|
-
|
|
1326
|
-
.. index::
|
|
1327
|
-
single: ctypes
|
|
1328
|
-
|
|
1329
|
-
Using ctypes is a powerful way to connect Python with arbitrary
|
|
1330
|
-
C-code. It's advantages for extending Python include
|
|
1331
|
-
|
|
1332
|
-
- clean separation of C-code from Python code
|
|
1333
|
-
|
|
1334
|
-
- no need to learn a new syntax except Python and C
|
|
1335
|
-
|
|
1336
|
-
- allows re-use of C-code
|
|
1337
|
-
|
|
1338
|
-
- functionality in shared libraries written for other purposes can be
|
|
1339
|
-
obtained with a simple Python wrapper and search for the library.
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
- easy integration with NumPy through the ctypes attribute
|
|
1343
|
-
|
|
1344
|
-
- full argument checking with the ndpointer class factory
|
|
1345
|
-
|
|
1346
|
-
It's disadvantages include
|
|
1347
|
-
|
|
1348
|
-
- It is difficult to distribute an extension module made using ctypes
|
|
1349
|
-
because of a lack of support for building shared libraries in
|
|
1350
|
-
distutils (but I suspect this will change in time).
|
|
1351
|
-
|
|
1352
|
-
- You must have shared-libraries of your code (no static libraries).
|
|
1353
|
-
|
|
1354
|
-
- Very little support for C++ code and it's different library-calling
|
|
1355
|
-
conventions. You will probably need a C-wrapper around C++ code to use
|
|
1356
|
-
with ctypes (or just use Boost.Python instead).
|
|
1357
|
-
|
|
1358
|
-
Because of the difficulty in distributing an extension module made
|
|
1359
|
-
using ctypes, f2py is still the easiest way to extend Python for
|
|
1360
|
-
package creation. However, ctypes is a close second and will probably
|
|
1361
|
-
be growing in popularity now that it is part of the Python
|
|
1362
|
-
distribution. This should bring more features to ctypes that should
|
|
1363
|
-
eliminate the difficulty in extending Python and distributing the
|
|
1364
|
-
extension using ctypes.
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
Additional tools you may find useful
|
|
1368
|
-
====================================
|
|
1369
|
-
|
|
1370
|
-
These tools have been found useful by others using Python and so are
|
|
1371
|
-
included here. They are discussed separately because I see them as
|
|
1372
|
-
either older ways to do things more modernly handled by f2py, weave,
|
|
1373
|
-
Pyrex, or ctypes (SWIG, PyFort, PyInline) or because I don't know much
|
|
1374
|
-
about them (SIP, Boost, Instant). I have not added links to these
|
|
1375
|
-
methods because my experience is that you can find the most relevant
|
|
1376
|
-
link faster using Google or some other search engine, and any links
|
|
1377
|
-
provided here would be quickly dated. Do not assume that just because
|
|
1378
|
-
it is included in this list, I don't think the package deserves your
|
|
1379
|
-
attention. I'm including information about these packages because many
|
|
1380
|
-
people have found them useful and I'd like to give you as many options
|
|
1381
|
-
as possible for tackling the problem of easily integrating your code.
|
|
1382
|
-
|
|
1383
|
-
|
|
1384
|
-
SWIG
|
|
1385
|
-
----
|
|
1386
|
-
|
|
1387
|
-
.. index::
|
|
1388
|
-
single: swig
|
|
1389
|
-
|
|
1390
|
-
Simplified Wrapper and Interface Generator (SWIG) is an old and fairly
|
|
1391
|
-
stable method for wrapping C/C++-libraries to a large variety of other
|
|
1392
|
-
languages. It does not specifically understand NumPy arrays but can be
|
|
1393
|
-
made useable with NumPy through the use of typemaps. There are some
|
|
1394
|
-
sample typemaps in the numpy/tools/swig directory under numpy.i together
|
|
1395
|
-
with an example module that makes use of them. SWIG excels at wrapping
|
|
1396
|
-
large C/C++ libraries because it can (almost) parse their headers and
|
|
1397
|
-
auto-produce an interface. Technically, you need to generate a ``.i``
|
|
1398
|
-
file that defines the interface. Often, however, this ``.i`` file can
|
|
1399
|
-
be parts of the header itself. The interface usually needs a bit of
|
|
1400
|
-
tweaking to be very useful. This ability to parse C/C++ headers and
|
|
1401
|
-
auto-generate the interface still makes SWIG a useful approach to
|
|
1402
|
-
adding functionalilty from C/C++ into Python, despite the other
|
|
1403
|
-
methods that have emerged that are more targeted to Python. SWIG can
|
|
1404
|
-
actually target extensions for several languages, but the typemaps
|
|
1405
|
-
usually have to be language-specific. Nonetheless, with modifications
|
|
1406
|
-
to the Python-specific typemaps, SWIG can be used to interface a
|
|
1407
|
-
library with other languages such as Perl, Tcl, and Ruby.
|
|
1408
|
-
|
|
1409
|
-
My experience with SWIG has been generally positive in that it is
|
|
1410
|
-
relatively easy to use and quite powerful. I used to use it quite
|
|
1411
|
-
often before becoming more proficient at writing C-extensions.
|
|
1412
|
-
However, I struggled writing custom interfaces with SWIG because it
|
|
1413
|
-
must be done using the concept of typemaps which are not Python
|
|
1414
|
-
specific and are written in a C-like syntax. Therefore, I tend to
|
|
1415
|
-
prefer other gluing strategies and would only attempt to use SWIG to
|
|
1416
|
-
wrap a very-large C/C++ library. Nonetheless, there are others who use
|
|
1417
|
-
SWIG quite happily.
|
|
1418
|
-
|
|
1419
|
-
|
|
1420
|
-
SIP
|
|
1421
|
-
---
|
|
1422
|
-
|
|
1423
|
-
.. index::
|
|
1424
|
-
single: SIP
|
|
1425
|
-
|
|
1426
|
-
SIP is another tool for wrapping C/C++ libraries that is Python
|
|
1427
|
-
specific and appears to have very good support for C++. Riverbank
|
|
1428
|
-
Computing developed SIP in order to create Python bindings to the QT
|
|
1429
|
-
library. An interface file must be written to generate the binding,
|
|
1430
|
-
but the interface file looks a lot like a C/C++ header file. While SIP
|
|
1431
|
-
is not a full C++ parser, it understands quite a bit of C++ syntax as
|
|
1432
|
-
well as its own special directives that allow modification of how the
|
|
1433
|
-
Python binding is accomplished. It also allows the user to define
|
|
1434
|
-
mappings between Python types and C/C++ structrues and classes.
|
|
1435
|
-
|
|
1436
|
-
|
|
1437
|
-
Boost Python
|
|
1438
|
-
------------
|
|
1439
|
-
|
|
1440
|
-
.. index::
|
|
1441
|
-
single: Boost.Python
|
|
1442
|
-
|
|
1443
|
-
Boost is a repository of C++ libraries and Boost.Python is one of
|
|
1444
|
-
those libraries which provides a concise interface for binding C++
|
|
1445
|
-
classes and functions to Python. The amazing part of the Boost.Python
|
|
1446
|
-
approach is that it works entirely in pure C++ without introducing a
|
|
1447
|
-
new syntax. Many users of C++ report that Boost.Python makes it
|
|
1448
|
-
possible to combine the best of both worlds in a seamless fashion. I
|
|
1449
|
-
have not used Boost.Python because I am not a big user of C++ and
|
|
1450
|
-
using Boost to wrap simple C-subroutines is usually over-kill. It's
|
|
1451
|
-
primary purpose is to make C++ classes available in Python. So, if you
|
|
1452
|
-
have a set of C++ classes that need to be integrated cleanly into
|
|
1453
|
-
Python, consider learning about and using Boost.Python.
|
|
1454
|
-
|
|
1455
|
-
|
|
1456
|
-
Instant
|
|
1457
|
-
-------
|
|
1458
|
-
|
|
1459
|
-
.. index::
|
|
1460
|
-
single: Instant
|
|
1461
|
-
|
|
1462
|
-
This is a relatively new package (called pyinstant at sourceforge)
|
|
1463
|
-
that builds on top of SWIG to make it easy to inline C and C++ code in
|
|
1464
|
-
Python very much like weave. However, Instant builds extension modules
|
|
1465
|
-
on the fly with specific module names and specific method names. In
|
|
1466
|
-
this repsect it is more more like f2py in its behavior. The extension
|
|
1467
|
-
modules are built on-the fly (as long as the SWIG is installed). They
|
|
1468
|
-
can then be imported. Here is an example of using Instant with NumPy
|
|
1469
|
-
arrays (adapted from the test2 included in the Instant distribution):
|
|
1470
|
-
|
|
1471
|
-
.. code-block:: python
|
|
1472
|
-
|
|
1473
|
-
code="""
|
|
1474
|
-
PyObject* add(PyObject* a_, PyObject* b_){
|
|
1475
|
-
/*
|
|
1476
|
-
various checks
|
|
1477
|
-
*/
|
|
1478
|
-
PyArrayObject* a=(PyArrayObject*) a_;
|
|
1479
|
-
PyArrayObject* b=(PyArrayObject*) b_;
|
|
1480
|
-
int n = a->dimensions[0];
|
|
1481
|
-
int dims[1];
|
|
1482
|
-
dims[0] = n;
|
|
1483
|
-
PyArrayObject* ret;
|
|
1484
|
-
ret = (PyArrayObject*) PyArray_FromDims(1, dims, NPY_DOUBLE);
|
|
1485
|
-
int i;
|
|
1486
|
-
char *aj=a->data;
|
|
1487
|
-
char *bj=b->data;
|
|
1488
|
-
double *retj = (double *)ret->data;
|
|
1489
|
-
for (i=0; i < n; i++) {
|
|
1490
|
-
*retj++ = *((double *)aj) + *((double *)bj);
|
|
1491
|
-
aj += a->strides[0];
|
|
1492
|
-
bj += b->strides[0];
|
|
1493
|
-
}
|
|
1494
|
-
return (PyObject *)ret;
|
|
1495
|
-
}
|
|
1496
|
-
"""
|
|
1497
|
-
import Instant, numpy
|
|
1498
|
-
ext = Instant.Instant()
|
|
1499
|
-
ext.create_extension(code=s, headers=["numpy/arrayobject.h"],
|
|
1500
|
-
include_dirs=[numpy.get_include()],
|
|
1501
|
-
init_code='import_array();', module="test2b_ext")
|
|
1502
|
-
import test2b_ext
|
|
1503
|
-
a = numpy.arange(1000)
|
|
1504
|
-
b = numpy.arange(1000)
|
|
1505
|
-
d = test2b_ext.add(a,b)
|
|
1506
|
-
|
|
1507
|
-
Except perhaps for the dependence on SWIG, Instant is a
|
|
1508
|
-
straightforward utility for writing extension modules.
|
|
1509
|
-
|
|
1510
|
-
|
|
1511
|
-
PyInline
|
|
1512
|
-
--------
|
|
1513
|
-
|
|
1514
|
-
This is a much older module that allows automatic building of
|
|
1515
|
-
extension modules so that C-code can be included with Python code.
|
|
1516
|
-
It's latest release (version 0.03) was in 2001, and it appears that it
|
|
1517
|
-
is not being updated.
|
|
1518
|
-
|
|
1519
|
-
|
|
1520
|
-
PyFort
|
|
1521
|
-
------
|
|
1522
|
-
|
|
1523
|
-
PyFort is a nice tool for wrapping Fortran and Fortran-like C-code
|
|
1524
|
-
into Python with support for Numeric arrays. It was written by Paul
|
|
1525
|
-
Dubois, a distinguished computer scientist and the very first
|
|
1526
|
-
maintainer of Numeric (now retired). It is worth mentioning in the
|
|
1527
|
-
hopes that somebody will update PyFort to work with NumPy arrays as
|
|
1528
|
-
well which now support either Fortran or C-style contiguous arrays.
|