numpy 1.9.3__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.
Files changed (1590) hide show
  1. numpy-1.10.0.post2/INSTALL.txt +200 -0
  2. numpy-1.10.0.post2/LICENSE.txt +30 -0
  3. numpy-1.10.0.post2/MANIFEST.in +31 -0
  4. numpy-1.10.0.post2/PKG-INFO +47 -0
  5. numpy-1.10.0.post2/cnew.txt +117 -0
  6. numpy-1.10.0.post2/cold.txt +44 -0
  7. numpy-1.10.0.post2/committers.txt +160 -0
  8. numpy-1.10.0.post2/cpre.txt +283 -0
  9. numpy-1.10.0.post2/crel.txt +161 -0
  10. numpy-1.10.0.post2/doc/release/1.10.0-notes.rst +439 -0
  11. numpy-1.10.0.post2/doc/source/conf.py +331 -0
  12. numpy-1.10.0.post2/doc/source/dev/development_environment.rst +211 -0
  13. numpy-1.10.0.post2/doc/source/dev/gitwash/development_workflow.rst +534 -0
  14. numpy-1.10.0.post2/doc/source/dev/gitwash/git_links.inc +95 -0
  15. numpy-1.10.0.post2/doc/source/dev/gitwash/index.rst +14 -0
  16. numpy-1.10.0.post2/doc/source/dev/index.rst +11 -0
  17. numpy-1.10.0.post2/doc/source/reference/arrays.classes.rst +490 -0
  18. numpy-1.10.0.post2/doc/source/reference/arrays.dtypes.rst +536 -0
  19. numpy-1.10.0.post2/doc/source/reference/arrays.indexing.rst +549 -0
  20. numpy-1.10.0.post2/doc/source/reference/arrays.interface.rst +337 -0
  21. numpy-1.10.0.post2/doc/source/reference/arrays.ndarray.rst +622 -0
  22. numpy-1.10.0.post2/doc/source/reference/arrays.scalars.rst +291 -0
  23. numpy-1.10.0.post2/doc/source/reference/c-api.array.rst +3393 -0
  24. numpy-1.10.0.post2/doc/source/reference/c-api.config.rst +103 -0
  25. numpy-1.10.0.post2/doc/source/reference/c-api.coremath.rst +420 -0
  26. numpy-1.10.0.post2/doc/source/reference/c-api.dtype.rst +376 -0
  27. numpy-1.10.0.post2/doc/source/reference/c-api.generalized-ufuncs.rst +191 -0
  28. numpy-1.10.0.post2/doc/source/reference/c-api.iterator.rst +1300 -0
  29. numpy-1.10.0.post2/doc/source/reference/c-api.types-and-structures.rst +1240 -0
  30. numpy-1.10.0.post2/doc/source/reference/c-api.ufunc.rst +413 -0
  31. numpy-1.10.0.post2/doc/source/reference/index.rst +43 -0
  32. numpy-1.10.0.post2/doc/source/reference/internals.code-explanations.rst +615 -0
  33. numpy-1.10.0.post2/doc/source/reference/routines.array-manipulation.rst +115 -0
  34. numpy-1.10.0.post2/doc/source/reference/routines.io.rst +78 -0
  35. numpy-1.10.0.post2/doc/source/reference/routines.linalg.rst +91 -0
  36. numpy-1.10.0.post2/doc/source/reference/routines.ma.rst +407 -0
  37. numpy-1.10.0.post2/doc/source/reference/routines.sort.rst +41 -0
  38. numpy-1.10.0.post2/doc/source/reference/routines.statistics.rst +57 -0
  39. numpy-1.10.0.post2/doc/source/reference/swig.interface-file.rst +1066 -0
  40. numpy-1.10.0.post2/doc/source/reference/swig.testing.rst +167 -0
  41. numpy-1.10.0.post2/doc/source/reference/ufuncs.rst +666 -0
  42. numpy-1.10.0.post2/doc/source/release.rst +20 -0
  43. numpy-1.10.0.post2/doc/source/user/basics.io.genfromtxt.rst +531 -0
  44. numpy-1.10.0.post2/doc/source/user/basics.rec.rst +7 -0
  45. numpy-1.10.0.post2/doc/source/user/c-info.beyond-basics.rst +560 -0
  46. numpy-1.10.0.post2/doc/source/user/c-info.how-to-extend.rst +642 -0
  47. numpy-1.10.0.post2/doc/source/user/c-info.python-as-glue.rst +1177 -0
  48. numpy-1.10.0.post2/doc/source/user/c-info.ufunc-tutorial.rst +1211 -0
  49. numpy-1.10.0.post2/doc/source/user/install.rst +194 -0
  50. numpy-1.10.0.post2/numpy/__init__.py +227 -0
  51. numpy-1.10.0.post2/numpy/_build_utils/README +8 -0
  52. numpy-1.10.0.post2/numpy/_build_utils/apple_accelerate.py +21 -0
  53. numpy-1.10.0.post2/numpy/_build_utils/common.py +138 -0
  54. numpy-1.10.0.post2/numpy/_build_utils/src/apple_sgemv_fix.c +227 -0
  55. numpy-1.10.0.post2/numpy/_build_utils/waf.py +531 -0
  56. numpy-1.10.0.post2/numpy/_import_tools.py +353 -0
  57. numpy-1.10.0.post2/numpy/add_newdocs.py +7611 -0
  58. numpy-1.10.0.post2/numpy/compat/_inspect.py +194 -0
  59. numpy-1.10.0.post2/numpy/compat/py3k.py +88 -0
  60. numpy-1.10.0.post2/numpy/compat/setup.py +12 -0
  61. numpy-1.10.0.post2/numpy/core/__init__.py +89 -0
  62. numpy-1.10.0.post2/numpy/core/_internal.py +761 -0
  63. numpy-1.10.0.post2/numpy/core/_methods.py +133 -0
  64. numpy-1.10.0.post2/numpy/core/arrayprint.py +760 -0
  65. numpy-1.10.0.post2/numpy/core/code_generators/cversions.txt +34 -0
  66. numpy-1.10.0.post2/numpy/core/code_generators/generate_ufunc_api.py +219 -0
  67. numpy-1.10.0.post2/numpy/core/code_generators/generate_umath.py +1017 -0
  68. numpy-1.10.0.post2/numpy/core/code_generators/numpy_api.py +415 -0
  69. numpy-1.10.0.post2/numpy/core/code_generators/ufunc_docstrings.py +3442 -0
  70. numpy-1.10.0.post2/numpy/core/defchararray.py +2689 -0
  71. numpy-1.10.0.post2/numpy/core/fromnumeric.py +3089 -0
  72. numpy-1.10.0.post2/numpy/core/function_base.py +203 -0
  73. numpy-1.10.0.post2/numpy/core/getlimits.py +308 -0
  74. numpy-1.10.0.post2/numpy/core/include/numpy/ndarrayobject.h +246 -0
  75. numpy-1.10.0.post2/numpy/core/include/numpy/ndarraytypes.h +1797 -0
  76. numpy-1.10.0.post2/numpy/core/include/numpy/npy_3kcompat.h +448 -0
  77. numpy-1.10.0.post2/numpy/core/include/numpy/npy_common.h +1051 -0
  78. numpy-1.10.0.post2/numpy/core/include/numpy/npy_cpu.h +92 -0
  79. numpy-1.10.0.post2/numpy/core/include/numpy/npy_endian.h +61 -0
  80. numpy-1.10.0.post2/numpy/core/include/numpy/npy_math.h +525 -0
  81. numpy-1.10.0.post2/numpy/core/include/numpy/numpyconfig.h +36 -0
  82. numpy-1.10.0.post2/numpy/core/machar.py +342 -0
  83. numpy-1.10.0.post2/numpy/core/memmap.py +311 -0
  84. numpy-1.10.0.post2/numpy/core/numeric.py +2893 -0
  85. numpy-1.10.0.post2/numpy/core/numerictypes.py +1036 -0
  86. numpy-1.10.0.post2/numpy/core/records.py +846 -0
  87. numpy-1.10.0.post2/numpy/core/setup.py +983 -0
  88. numpy-1.10.0.post2/numpy/core/setup_common.py +352 -0
  89. numpy-1.10.0.post2/numpy/core/shape_base.py +350 -0
  90. numpy-1.10.0.post2/numpy/core/src/multiarray/alloc.c +244 -0
  91. numpy-1.10.0.post2/numpy/core/src/multiarray/arrayobject.c +1858 -0
  92. numpy-1.10.0.post2/numpy/core/src/multiarray/arraytypes.c.src +4738 -0
  93. numpy-1.10.0.post2/numpy/core/src/multiarray/arraytypes.h +37 -0
  94. numpy-1.10.0.post2/numpy/core/src/multiarray/buffer.c +981 -0
  95. numpy-1.10.0.post2/numpy/core/src/multiarray/calculation.c +1224 -0
  96. numpy-1.10.0.post2/numpy/core/src/multiarray/cblasfuncs.c +812 -0
  97. numpy-1.10.0.post2/numpy/core/src/multiarray/cblasfuncs.h +10 -0
  98. numpy-1.10.0.post2/numpy/core/src/multiarray/common.c +911 -0
  99. numpy-1.10.0.post2/numpy/core/src/multiarray/common.h +250 -0
  100. numpy-1.10.0.post2/numpy/core/src/multiarray/compiled_base.c +1664 -0
  101. numpy-1.10.0.post2/numpy/core/src/multiarray/compiled_base.h +24 -0
  102. numpy-1.10.0.post2/numpy/core/src/multiarray/conversion_utils.c +1217 -0
  103. numpy-1.10.0.post2/numpy/core/src/multiarray/convert.c +590 -0
  104. numpy-1.10.0.post2/numpy/core/src/multiarray/convert_datatype.c +2155 -0
  105. numpy-1.10.0.post2/numpy/core/src/multiarray/ctors.c +3838 -0
  106. numpy-1.10.0.post2/numpy/core/src/multiarray/datetime.c +3821 -0
  107. numpy-1.10.0.post2/numpy/core/src/multiarray/datetime_busday.c +1322 -0
  108. numpy-1.10.0.post2/numpy/core/src/multiarray/datetime_busdaycal.c +552 -0
  109. numpy-1.10.0.post2/numpy/core/src/multiarray/datetime_strings.c +1772 -0
  110. numpy-1.10.0.post2/numpy/core/src/multiarray/descriptor.c +3719 -0
  111. numpy-1.10.0.post2/numpy/core/src/multiarray/dtype_transfer.c +4239 -0
  112. numpy-1.10.0.post2/numpy/core/src/multiarray/einsum.c.src +3005 -0
  113. numpy-1.10.0.post2/numpy/core/src/multiarray/getset.c +986 -0
  114. numpy-1.10.0.post2/numpy/core/src/multiarray/hashdescr.c +318 -0
  115. numpy-1.10.0.post2/numpy/core/src/multiarray/item_selection.c +2413 -0
  116. numpy-1.10.0.post2/numpy/core/src/multiarray/iterators.c +2192 -0
  117. numpy-1.10.0.post2/numpy/core/src/multiarray/lowlevel_strided_loops.c.src +1769 -0
  118. numpy-1.10.0.post2/numpy/core/src/multiarray/mapping.c +3380 -0
  119. numpy-1.10.0.post2/numpy/core/src/multiarray/mapping.h +77 -0
  120. numpy-1.10.0.post2/numpy/core/src/multiarray/methods.c +2514 -0
  121. numpy-1.10.0.post2/numpy/core/src/multiarray/multiarray_tests.c.src +1035 -0
  122. numpy-1.10.0.post2/numpy/core/src/multiarray/multiarraymodule.c +4628 -0
  123. numpy-1.10.0.post2/numpy/core/src/multiarray/multiarraymodule.h +15 -0
  124. numpy-1.10.0.post2/numpy/core/src/multiarray/nditer_api.c +2809 -0
  125. numpy-1.10.0.post2/numpy/core/src/multiarray/nditer_constr.c +3160 -0
  126. numpy-1.10.0.post2/numpy/core/src/multiarray/nditer_pywrap.c +2499 -0
  127. numpy-1.10.0.post2/numpy/core/src/multiarray/number.c +1106 -0
  128. numpy-1.10.0.post2/numpy/core/src/multiarray/number.h +77 -0
  129. numpy-1.10.0.post2/numpy/core/src/multiarray/numpymemoryview.c +308 -0
  130. numpy-1.10.0.post2/numpy/core/src/multiarray/numpyos.c +683 -0
  131. numpy-1.10.0.post2/numpy/core/src/multiarray/scalarapi.c +870 -0
  132. numpy-1.10.0.post2/numpy/core/src/multiarray/scalartypes.c.src +4343 -0
  133. numpy-1.10.0.post2/numpy/core/src/multiarray/scalartypes.h +55 -0
  134. numpy-1.10.0.post2/numpy/core/src/multiarray/shape.c +1131 -0
  135. numpy-1.10.0.post2/numpy/core/src/multiarray/ucsnarrow.c +174 -0
  136. numpy-1.10.0.post2/numpy/core/src/multiarray/vdot.c +180 -0
  137. numpy-1.10.0.post2/numpy/core/src/multiarray/vdot.h +18 -0
  138. numpy-1.10.0.post2/numpy/core/src/npymath/ieee754.c.src +808 -0
  139. numpy-1.10.0.post2/numpy/core/src/npymath/npy_math.c.src +597 -0
  140. numpy-1.10.0.post2/numpy/core/src/npymath/npy_math_complex.c.src +1788 -0
  141. numpy-1.10.0.post2/numpy/core/src/npymath/npy_math_private.h +544 -0
  142. numpy-1.10.0.post2/numpy/core/src/npysort/heapsort.c.src +402 -0
  143. numpy-1.10.0.post2/numpy/core/src/npysort/mergesort.c.src +488 -0
  144. numpy-1.10.0.post2/numpy/core/src/npysort/npysort_common.h +360 -0
  145. numpy-1.10.0.post2/numpy/core/src/npysort/quicksort.c.src +523 -0
  146. numpy-1.10.0.post2/numpy/core/src/npysort/selection.c.src +426 -0
  147. numpy-1.10.0.post2/numpy/core/src/private/npy_cblas.h +584 -0
  148. numpy-1.10.0.post2/numpy/core/src/private/npy_config.h +101 -0
  149. numpy-1.10.0.post2/numpy/core/src/private/npy_import.h +32 -0
  150. numpy-1.10.0.post2/numpy/core/src/private/npy_partition.h.src +122 -0
  151. numpy-1.10.0.post2/numpy/core/src/private/npy_sort.h +196 -0
  152. numpy-1.10.0.post2/numpy/core/src/private/templ_common.h.src +43 -0
  153. numpy-1.10.0.post2/numpy/core/src/private/ufunc_override.h +397 -0
  154. numpy-1.10.0.post2/numpy/core/src/umath/funcs.inc.src +356 -0
  155. numpy-1.10.0.post2/numpy/core/src/umath/loops.c.src +2675 -0
  156. numpy-1.10.0.post2/numpy/core/src/umath/loops.h.src +497 -0
  157. numpy-1.10.0.post2/numpy/core/src/umath/operand_flag_tests.c.src +105 -0
  158. numpy-1.10.0.post2/numpy/core/src/umath/scalarmath.c.src +1738 -0
  159. numpy-1.10.0.post2/numpy/core/src/umath/simd.inc.src +903 -0
  160. numpy-1.10.0.post2/numpy/core/src/umath/test_rational.c.src +1404 -0
  161. numpy-1.10.0.post2/numpy/core/src/umath/ufunc_object.c +5703 -0
  162. numpy-1.10.0.post2/numpy/core/src/umath/ufunc_type_resolution.c +2159 -0
  163. numpy-1.10.0.post2/numpy/core/src/umath/umath_tests.c.src +392 -0
  164. numpy-1.10.0.post2/numpy/core/src/umath/umathmodule.c +443 -0
  165. numpy-1.10.0.post2/numpy/core/tests/test_abc.py +47 -0
  166. numpy-1.10.0.post2/numpy/core/tests/test_api.py +515 -0
  167. numpy-1.10.0.post2/numpy/core/tests/test_arrayprint.py +171 -0
  168. numpy-1.10.0.post2/numpy/core/tests/test_datetime.py +1820 -0
  169. numpy-1.10.0.post2/numpy/core/tests/test_defchararray.py +703 -0
  170. numpy-1.10.0.post2/numpy/core/tests/test_deprecations.py +619 -0
  171. numpy-1.10.0.post2/numpy/core/tests/test_dtype.py +578 -0
  172. numpy-1.10.0.post2/numpy/core/tests/test_einsum.py +627 -0
  173. numpy-1.10.0.post2/numpy/core/tests/test_errstate.py +52 -0
  174. numpy-1.10.0.post2/numpy/core/tests/test_function_base.py +142 -0
  175. numpy-1.10.0.post2/numpy/core/tests/test_getlimits.py +77 -0
  176. numpy-1.10.0.post2/numpy/core/tests/test_half.py +436 -0
  177. numpy-1.10.0.post2/numpy/core/tests/test_indexerrors.py +126 -0
  178. numpy-1.10.0.post2/numpy/core/tests/test_indexing.py +1047 -0
  179. numpy-1.10.0.post2/numpy/core/tests/test_item_selection.py +73 -0
  180. numpy-1.10.0.post2/numpy/core/tests/test_machar.py +29 -0
  181. numpy-1.10.0.post2/numpy/core/tests/test_memmap.py +130 -0
  182. numpy-1.10.0.post2/numpy/core/tests/test_multiarray.py +5924 -0
  183. numpy-1.10.0.post2/numpy/core/tests/test_multiarray_assignment.py +84 -0
  184. numpy-1.10.0.post2/numpy/core/tests/test_nditer.py +2638 -0
  185. numpy-1.10.0.post2/numpy/core/tests/test_numeric.py +2204 -0
  186. numpy-1.10.0.post2/numpy/core/tests/test_numerictypes.py +382 -0
  187. numpy-1.10.0.post2/numpy/core/tests/test_print.py +248 -0
  188. numpy-1.10.0.post2/numpy/core/tests/test_records.py +299 -0
  189. numpy-1.10.0.post2/numpy/core/tests/test_regression.py +2177 -0
  190. numpy-1.10.0.post2/numpy/core/tests/test_scalarinherit.py +41 -0
  191. numpy-1.10.0.post2/numpy/core/tests/test_scalarmath.py +316 -0
  192. numpy-1.10.0.post2/numpy/core/tests/test_shape_base.py +319 -0
  193. numpy-1.10.0.post2/numpy/core/tests/test_ufunc.py +1227 -0
  194. numpy-1.10.0.post2/numpy/core/tests/test_umath.py +1933 -0
  195. numpy-1.10.0.post2/numpy/core/tests/test_umath_complex.py +538 -0
  196. numpy-1.10.0.post2/numpy/core/tests/test_unicode.py +360 -0
  197. numpy-1.10.0.post2/numpy/distutils/__init__.py +23 -0
  198. numpy-1.10.0.post2/numpy/distutils/ccompiler.py +690 -0
  199. numpy-1.10.0.post2/numpy/distutils/command/autodist.py +94 -0
  200. numpy-1.10.0.post2/numpy/distutils/command/build.py +47 -0
  201. numpy-1.10.0.post2/numpy/distutils/command/build_clib.py +295 -0
  202. numpy-1.10.0.post2/numpy/distutils/command/build_ext.py +522 -0
  203. numpy-1.10.0.post2/numpy/distutils/command/config.py +437 -0
  204. numpy-1.10.0.post2/numpy/distutils/exec_command.py +651 -0
  205. numpy-1.10.0.post2/numpy/distutils/fcompiler/compaq.py +128 -0
  206. numpy-1.10.0.post2/numpy/distutils/fcompiler/gnu.py +403 -0
  207. numpy-1.10.0.post2/numpy/distutils/fcompiler/intel.py +217 -0
  208. numpy-1.10.0.post2/numpy/distutils/fcompiler/pg.py +63 -0
  209. numpy-1.10.0.post2/numpy/distutils/fcompiler/sun.py +55 -0
  210. numpy-1.10.0.post2/numpy/distutils/intelccompiler.py +95 -0
  211. numpy-1.10.0.post2/numpy/distutils/lib2def.py +116 -0
  212. numpy-1.10.0.post2/numpy/distutils/mingw32ccompiler.py +599 -0
  213. numpy-1.10.0.post2/numpy/distutils/misc_util.py +2306 -0
  214. numpy-1.10.0.post2/numpy/distutils/msvc9compiler.py +23 -0
  215. numpy-1.10.0.post2/numpy/distutils/msvccompiler.py +17 -0
  216. numpy-1.10.0.post2/numpy/distutils/npy_pkg_config.py +451 -0
  217. numpy-1.10.0.post2/numpy/distutils/system_info.py +2397 -0
  218. numpy-1.10.0.post2/numpy/distutils/tests/f2py_ext/tests/test_fib2.py +12 -0
  219. numpy-1.10.0.post2/numpy/distutils/tests/f2py_f90_ext/tests/test_foo.py +11 -0
  220. numpy-1.10.0.post2/numpy/distutils/tests/gen_ext/tests/test_fib3.py +11 -0
  221. numpy-1.10.0.post2/numpy/distutils/tests/pyrex_ext/tests/test_primes.py +13 -0
  222. numpy-1.10.0.post2/numpy/distutils/tests/swig_ext/__init__.py +1 -0
  223. numpy-1.10.0.post2/numpy/distutils/tests/swig_ext/tests/test_example.py +17 -0
  224. numpy-1.10.0.post2/numpy/distutils/tests/swig_ext/tests/test_example2.py +15 -0
  225. numpy-1.10.0.post2/numpy/distutils/tests/test_fcompiler_gnu.py +60 -0
  226. numpy-1.10.0.post2/numpy/distutils/tests/test_fcompiler_intel.py +36 -0
  227. numpy-1.10.0.post2/numpy/distutils/tests/test_misc_util.py +79 -0
  228. numpy-1.10.0.post2/numpy/distutils/tests/test_npy_pkg_config.py +102 -0
  229. numpy-1.10.0.post2/numpy/distutils/tests/test_system_info.py +209 -0
  230. numpy-1.10.0.post2/numpy/distutils/unixccompiler.py +125 -0
  231. numpy-1.10.0.post2/numpy/doc/byteswapping.py +156 -0
  232. numpy-1.10.0.post2/numpy/doc/creation.py +144 -0
  233. numpy-1.10.0.post2/numpy/doc/glossary.py +423 -0
  234. numpy-1.10.0.post2/numpy/doc/indexing.py +439 -0
  235. numpy-1.10.0.post2/numpy/doc/structured_arrays.py +290 -0
  236. numpy-1.10.0.post2/numpy/f2py/__init__.py +49 -0
  237. numpy-1.10.0.post2/numpy/f2py/__main__.py +25 -0
  238. numpy-1.10.0.post2/numpy/f2py/auxfuncs.py +858 -0
  239. numpy-1.10.0.post2/numpy/f2py/capi_maps.py +851 -0
  240. numpy-1.10.0.post2/numpy/f2py/cb_rules.py +554 -0
  241. numpy-1.10.0.post2/numpy/f2py/cfuncs.py +1261 -0
  242. numpy-1.10.0.post2/numpy/f2py/common_rules.py +150 -0
  243. numpy-1.10.0.post2/numpy/f2py/crackfortran.py +3314 -0
  244. numpy-1.10.0.post2/numpy/f2py/diagnose.py +156 -0
  245. numpy-1.10.0.post2/numpy/f2py/f2py2e.py +656 -0
  246. numpy-1.10.0.post2/numpy/f2py/f2py_testing.py +48 -0
  247. numpy-1.10.0.post2/numpy/f2py/f90mod_rules.py +272 -0
  248. numpy-1.10.0.post2/numpy/f2py/func2subr.py +299 -0
  249. numpy-1.10.0.post2/numpy/f2py/rules.py +1475 -0
  250. numpy-1.10.0.post2/numpy/f2py/setup.py +117 -0
  251. numpy-1.10.0.post2/numpy/f2py/src/fortranobject.c +1037 -0
  252. numpy-1.10.0.post2/numpy/f2py/src/fortranobject.h +162 -0
  253. numpy-1.10.0.post2/numpy/f2py/tests/src/array_from_pyobj/wrapmodule.c +223 -0
  254. numpy-1.10.0.post2/numpy/f2py/tests/test_array_from_pyobj.py +593 -0
  255. numpy-1.10.0.post2/numpy/f2py/tests/test_assumed_shape.py +35 -0
  256. numpy-1.10.0.post2/numpy/f2py/tests/test_callback.py +136 -0
  257. numpy-1.10.0.post2/numpy/f2py/tests/test_kind.py +36 -0
  258. numpy-1.10.0.post2/numpy/f2py/tests/test_mixed.py +40 -0
  259. numpy-1.10.0.post2/numpy/f2py/tests/test_regression.py +34 -0
  260. numpy-1.10.0.post2/numpy/f2py/tests/test_return_character.py +148 -0
  261. numpy-1.10.0.post2/numpy/f2py/tests/test_return_complex.py +170 -0
  262. numpy-1.10.0.post2/numpy/f2py/tests/test_return_integer.py +180 -0
  263. numpy-1.10.0.post2/numpy/f2py/tests/test_return_logical.py +189 -0
  264. numpy-1.10.0.post2/numpy/f2py/tests/test_return_real.py +206 -0
  265. numpy-1.10.0.post2/numpy/f2py/tests/test_size.py +44 -0
  266. numpy-1.10.0.post2/numpy/f2py/tests/util.py +367 -0
  267. numpy-1.10.0.post2/numpy/f2py/use_rules.py +115 -0
  268. numpy-1.10.0.post2/numpy/fft/fftpack.c +1501 -0
  269. numpy-1.10.0.post2/numpy/fft/fftpack.h +28 -0
  270. numpy-1.10.0.post2/numpy/fft/fftpack.py +1241 -0
  271. numpy-1.10.0.post2/numpy/fft/fftpack_litemodule.c +363 -0
  272. numpy-1.10.0.post2/numpy/fft/info.py +187 -0
  273. numpy-1.10.0.post2/numpy/fft/setup.py +19 -0
  274. numpy-1.10.0.post2/numpy/fft/tests/test_fftpack.py +166 -0
  275. numpy-1.10.0.post2/numpy/fft/tests/test_helper.py +78 -0
  276. numpy-1.10.0.post2/numpy/lib/_iotools.py +917 -0
  277. numpy-1.10.0.post2/numpy/lib/arraypad.py +1497 -0
  278. numpy-1.10.0.post2/numpy/lib/arraysetops.py +480 -0
  279. numpy-1.10.0.post2/numpy/lib/arrayterator.py +226 -0
  280. numpy-1.10.0.post2/numpy/lib/financial.py +737 -0
  281. numpy-1.10.0.post2/numpy/lib/format.py +814 -0
  282. numpy-1.10.0.post2/numpy/lib/function_base.py +4150 -0
  283. numpy-1.10.0.post2/numpy/lib/index_tricks.py +874 -0
  284. numpy-1.10.0.post2/numpy/lib/info.py +152 -0
  285. numpy-1.10.0.post2/numpy/lib/nanfunctions.py +1237 -0
  286. numpy-1.10.0.post2/numpy/lib/npyio.py +1992 -0
  287. numpy-1.10.0.post2/numpy/lib/polynomial.py +1277 -0
  288. numpy-1.10.0.post2/numpy/lib/recfunctions.py +1003 -0
  289. numpy-1.10.0.post2/numpy/lib/setup.py +12 -0
  290. numpy-1.10.0.post2/numpy/lib/shape_base.py +872 -0
  291. numpy-1.10.0.post2/numpy/lib/stride_tricks.py +200 -0
  292. numpy-1.10.0.post2/numpy/lib/tests/data/py2-objarr.npy +0 -0
  293. numpy-1.10.0.post2/numpy/lib/tests/data/py2-objarr.npz +0 -0
  294. numpy-1.10.0.post2/numpy/lib/tests/data/py3-objarr.npy +0 -0
  295. numpy-1.10.0.post2/numpy/lib/tests/data/py3-objarr.npz +0 -0
  296. numpy-1.10.0.post2/numpy/lib/tests/test__iotools.py +348 -0
  297. numpy-1.10.0.post2/numpy/lib/tests/test__version.py +70 -0
  298. numpy-1.10.0.post2/numpy/lib/tests/test_arraypad.py +1047 -0
  299. numpy-1.10.0.post2/numpy/lib/tests/test_arraysetops.py +309 -0
  300. numpy-1.10.0.post2/numpy/lib/tests/test_financial.py +163 -0
  301. numpy-1.10.0.post2/numpy/lib/tests/test_format.py +841 -0
  302. numpy-1.10.0.post2/numpy/lib/tests/test_function_base.py +2555 -0
  303. numpy-1.10.0.post2/numpy/lib/tests/test_index_tricks.py +326 -0
  304. numpy-1.10.0.post2/numpy/lib/tests/test_io.py +1916 -0
  305. numpy-1.10.0.post2/numpy/lib/tests/test_nanfunctions.py +707 -0
  306. numpy-1.10.0.post2/numpy/lib/tests/test_packbits.py +26 -0
  307. numpy-1.10.0.post2/numpy/lib/tests/test_polynomial.py +188 -0
  308. numpy-1.10.0.post2/numpy/lib/tests/test_recfunctions.py +734 -0
  309. numpy-1.10.0.post2/numpy/lib/tests/test_shape_base.py +386 -0
  310. numpy-1.10.0.post2/numpy/lib/tests/test_stride_tricks.py +405 -0
  311. numpy-1.10.0.post2/numpy/lib/tests/test_twodim_base.py +535 -0
  312. numpy-1.10.0.post2/numpy/lib/tests/test_type_check.py +332 -0
  313. numpy-1.10.0.post2/numpy/lib/twodim_base.py +1007 -0
  314. numpy-1.10.0.post2/numpy/lib/type_check.py +596 -0
  315. numpy-1.10.0.post2/numpy/lib/utils.py +1122 -0
  316. numpy-1.10.0.post2/numpy/linalg/lapack_lite/python_xerbla.c +46 -0
  317. numpy-1.10.0.post2/numpy/linalg/lapack_litemodule.c +358 -0
  318. numpy-1.10.0.post2/numpy/linalg/linalg.py +2406 -0
  319. numpy-1.10.0.post2/numpy/linalg/tests/test_build.py +59 -0
  320. numpy-1.10.0.post2/numpy/linalg/tests/test_linalg.py +1351 -0
  321. numpy-1.10.0.post2/numpy/linalg/tests/test_regression.py +95 -0
  322. numpy-1.10.0.post2/numpy/linalg/umath_linalg.c.src +3236 -0
  323. numpy-1.10.0.post2/numpy/ma/__init__.py +56 -0
  324. numpy-1.10.0.post2/numpy/ma/bench.py +131 -0
  325. numpy-1.10.0.post2/numpy/ma/core.py +7608 -0
  326. numpy-1.10.0.post2/numpy/ma/extras.py +1953 -0
  327. numpy-1.10.0.post2/numpy/ma/mrecords.py +796 -0
  328. numpy-1.10.0.post2/numpy/ma/setup.py +13 -0
  329. numpy-1.10.0.post2/numpy/ma/tests/test_core.py +4100 -0
  330. numpy-1.10.0.post2/numpy/ma/tests/test_extras.py +1132 -0
  331. numpy-1.10.0.post2/numpy/ma/tests/test_mrecords.py +520 -0
  332. numpy-1.10.0.post2/numpy/ma/tests/test_old_ma.py +879 -0
  333. numpy-1.10.0.post2/numpy/ma/tests/test_regression.py +80 -0
  334. numpy-1.10.0.post2/numpy/ma/tests/test_subclassing.py +338 -0
  335. numpy-1.10.0.post2/numpy/ma/testutils.py +289 -0
  336. numpy-1.10.0.post2/numpy/ma/timer_comparison.py +440 -0
  337. numpy-1.10.0.post2/numpy/matlib.py +358 -0
  338. numpy-1.10.0.post2/numpy/matrixlib/defmatrix.py +1232 -0
  339. numpy-1.10.0.post2/numpy/matrixlib/tests/test_defmatrix.py +449 -0
  340. numpy-1.10.0.post2/numpy/matrixlib/tests/test_multiarray.py +23 -0
  341. numpy-1.10.0.post2/numpy/matrixlib/tests/test_numeric.py +23 -0
  342. numpy-1.10.0.post2/numpy/matrixlib/tests/test_regression.py +37 -0
  343. numpy-1.10.0.post2/numpy/polynomial/_polybase.py +962 -0
  344. numpy-1.10.0.post2/numpy/polynomial/chebyshev.py +2056 -0
  345. numpy-1.10.0.post2/numpy/polynomial/hermite.py +1831 -0
  346. numpy-1.10.0.post2/numpy/polynomial/hermite_e.py +1828 -0
  347. numpy-1.10.0.post2/numpy/polynomial/laguerre.py +1780 -0
  348. numpy-1.10.0.post2/numpy/polynomial/legendre.py +1808 -0
  349. numpy-1.10.0.post2/numpy/polynomial/polyutils.py +403 -0
  350. numpy-1.10.0.post2/numpy/random/mtrand/distributions.c +912 -0
  351. numpy-1.10.0.post2/numpy/random/mtrand/mtrand.c +34805 -0
  352. numpy-1.10.0.post2/numpy/random/mtrand/mtrand.pyx +4766 -0
  353. numpy-1.10.0.post2/numpy/random/setup.py +61 -0
  354. numpy-1.10.0.post2/numpy/random/tests/test_random.py +723 -0
  355. numpy-1.10.0.post2/numpy/random/tests/test_regression.py +117 -0
  356. numpy-1.10.0.post2/numpy/setup.py +29 -0
  357. numpy-1.10.0.post2/numpy/testing/__init__.py +15 -0
  358. numpy-1.10.0.post2/numpy/testing/decorators.py +271 -0
  359. numpy-1.10.0.post2/numpy/testing/noseclasses.py +353 -0
  360. numpy-1.10.0.post2/numpy/testing/nosetester.py +511 -0
  361. numpy-1.10.0.post2/numpy/testing/print_coercion_tables.py +91 -0
  362. numpy-1.10.0.post2/numpy/testing/setup.py +20 -0
  363. numpy-1.10.0.post2/numpy/testing/tests/test_decorators.py +182 -0
  364. numpy-1.10.0.post2/numpy/testing/tests/test_utils.py +781 -0
  365. numpy-1.10.0.post2/numpy/testing/utils.py +1831 -0
  366. numpy-1.10.0.post2/numpy/tests/test_ctypeslib.py +106 -0
  367. numpy-1.10.0.post2/numpy/tests/test_matlib.py +55 -0
  368. numpy-1.10.0.post2/numpy/tests/test_scripts.py +69 -0
  369. numpy-1.10.0.post2/numpy/version.py +10 -0
  370. numpy-1.10.0.post2/setup.py +260 -0
  371. numpy-1.10.0.post2/site.cfg.example +193 -0
  372. numpy-1.10.0.post2/tmp.txt +789 -0
  373. numpy-1.10.0.post2/tools/swig/README +145 -0
  374. numpy-1.10.0.post2/tools/swig/numpy.i +3161 -0
  375. numpy-1.10.0.post2/tools/swig/test/Array.i +135 -0
  376. numpy-1.10.0.post2/tools/swig/test/ArrayZ.cxx +131 -0
  377. numpy-1.10.0.post2/tools/swig/test/ArrayZ.h +56 -0
  378. numpy-1.10.0.post2/tools/swig/test/Flat.cxx +36 -0
  379. numpy-1.10.0.post2/tools/swig/test/Flat.h +34 -0
  380. numpy-1.10.0.post2/tools/swig/test/Flat.i +36 -0
  381. numpy-1.10.0.post2/tools/swig/test/Makefile +37 -0
  382. numpy-1.10.0.post2/tools/swig/test/setup.py +71 -0
  383. numpy-1.10.0.post2/tools/swig/test/testArray.py +385 -0
  384. numpy-1.10.0.post2/tools/swig/test/testFarray.py +159 -0
  385. numpy-1.10.0.post2/tools/swig/test/testFlat.py +200 -0
  386. numpy-1.10.0.post2/tools/swig/test/testFortran.py +173 -0
  387. numpy-1.10.0.post2/tools/swig/test/testMatrix.py +362 -0
  388. numpy-1.10.0.post2/tools/swig/test/testSuperTensor.py +388 -0
  389. numpy-1.10.0.post2/tools/swig/test/testTensor.py +402 -0
  390. numpy-1.10.0.post2/tools/swig/test/testVector.py +381 -0
  391. numpy-1.9.3/INSTALL.txt +0 -138
  392. numpy-1.9.3/LICENSE.txt +0 -30
  393. numpy-1.9.3/MANIFEST.in +0 -26
  394. numpy-1.9.3/PKG-INFO +0 -39
  395. numpy-1.9.3/doc/release/1.9.3-notes.rst +0 -23
  396. numpy-1.9.3/doc/source/conf.py +0 -331
  397. numpy-1.9.3/doc/source/dev/gitwash/branch_list.png +0 -0
  398. numpy-1.9.3/doc/source/dev/gitwash/branch_list_compare.png +0 -0
  399. numpy-1.9.3/doc/source/dev/gitwash/development_workflow.rst +0 -568
  400. numpy-1.9.3/doc/source/dev/gitwash/git_links.inc +0 -88
  401. numpy-1.9.3/doc/source/dev/gitwash/index.rst +0 -14
  402. numpy-1.9.3/doc/source/dev/index.rst +0 -10
  403. numpy-1.9.3/doc/source/reference/arrays.classes.rst +0 -427
  404. numpy-1.9.3/doc/source/reference/arrays.dtypes.rst +0 -534
  405. numpy-1.9.3/doc/source/reference/arrays.indexing.rst +0 -550
  406. numpy-1.9.3/doc/source/reference/arrays.interface.rst +0 -336
  407. numpy-1.9.3/doc/source/reference/arrays.ndarray.rst +0 -609
  408. numpy-1.9.3/doc/source/reference/arrays.scalars.rst +0 -291
  409. numpy-1.9.3/doc/source/reference/c-api.array.rst +0 -3362
  410. numpy-1.9.3/doc/source/reference/c-api.config.rst +0 -103
  411. numpy-1.9.3/doc/source/reference/c-api.coremath.rst +0 -420
  412. numpy-1.9.3/doc/source/reference/c-api.dtype.rst +0 -376
  413. numpy-1.9.3/doc/source/reference/c-api.generalized-ufuncs.rst +0 -171
  414. numpy-1.9.3/doc/source/reference/c-api.iterator.rst +0 -1298
  415. numpy-1.9.3/doc/source/reference/c-api.types-and-structures.rst +0 -1204
  416. numpy-1.9.3/doc/source/reference/c-api.ufunc.rst +0 -399
  417. numpy-1.9.3/doc/source/reference/index.rst +0 -44
  418. numpy-1.9.3/doc/source/reference/internals.code-explanations.rst +0 -666
  419. numpy-1.9.3/doc/source/reference/routines.array-manipulation.rst +0 -113
  420. numpy-1.9.3/doc/source/reference/routines.io.rst +0 -74
  421. numpy-1.9.3/doc/source/reference/routines.linalg.rst +0 -88
  422. numpy-1.9.3/doc/source/reference/routines.ma.rst +0 -405
  423. numpy-1.9.3/doc/source/reference/routines.sort.rst +0 -42
  424. numpy-1.9.3/doc/source/reference/routines.statistics.rst +0 -55
  425. numpy-1.9.3/doc/source/reference/swig.interface-file.rst +0 -1055
  426. numpy-1.9.3/doc/source/reference/swig.testing.rst +0 -166
  427. numpy-1.9.3/doc/source/reference/ufuncs.rst +0 -651
  428. numpy-1.9.3/doc/source/release.rst +0 -19
  429. numpy-1.9.3/doc/source/user/basics.io.genfromtxt.rst +0 -531
  430. numpy-1.9.3/doc/source/user/basics.rec.rst +0 -7
  431. numpy-1.9.3/doc/source/user/c-info.beyond-basics.rst +0 -560
  432. numpy-1.9.3/doc/source/user/c-info.how-to-extend.rst +0 -642
  433. numpy-1.9.3/doc/source/user/c-info.python-as-glue.rst +0 -1528
  434. numpy-1.9.3/doc/source/user/c-info.ufunc-tutorial.rst +0 -1211
  435. numpy-1.9.3/doc/source/user/install.rst +0 -180
  436. numpy-1.9.3/numpy/__init__.py +0 -216
  437. numpy-1.9.3/numpy/_import_tools.py +0 -348
  438. numpy-1.9.3/numpy/add_newdocs.py +0 -7518
  439. numpy-1.9.3/numpy/compat/_inspect.py +0 -221
  440. numpy-1.9.3/numpy/compat/py3k.py +0 -89
  441. numpy-1.9.3/numpy/compat/setup.py +0 -12
  442. numpy-1.9.3/numpy/core/__init__.py +0 -78
  443. numpy-1.9.3/numpy/core/_internal.py +0 -570
  444. numpy-1.9.3/numpy/core/_methods.py +0 -134
  445. numpy-1.9.3/numpy/core/arrayprint.py +0 -752
  446. numpy-1.9.3/numpy/core/blasdot/_dotblas.c +0 -1255
  447. numpy-1.9.3/numpy/core/blasdot/apple_sgemv_patch.c +0 -216
  448. numpy-1.9.3/numpy/core/blasdot/cblas.h +0 -578
  449. numpy-1.9.3/numpy/core/code_generators/cversions.txt +0 -31
  450. numpy-1.9.3/numpy/core/code_generators/generate_ufunc_api.py +0 -219
  451. numpy-1.9.3/numpy/core/code_generators/generate_umath.py +0 -972
  452. numpy-1.9.3/numpy/core/code_generators/numpy_api.py +0 -412
  453. numpy-1.9.3/numpy/core/code_generators/ufunc_docstrings.py +0 -3419
  454. numpy-1.9.3/numpy/core/defchararray.py +0 -2687
  455. numpy-1.9.3/numpy/core/fromnumeric.py +0 -2938
  456. numpy-1.9.3/numpy/core/function_base.py +0 -190
  457. numpy-1.9.3/numpy/core/getlimits.py +0 -306
  458. numpy-1.9.3/numpy/core/include/numpy/fenv/fenv.c +0 -38
  459. numpy-1.9.3/numpy/core/include/numpy/fenv/fenv.h +0 -224
  460. numpy-1.9.3/numpy/core/include/numpy/ndarrayobject.h +0 -237
  461. numpy-1.9.3/numpy/core/include/numpy/ndarraytypes.h +0 -1820
  462. numpy-1.9.3/numpy/core/include/numpy/npy_3kcompat.h +0 -506
  463. numpy-1.9.3/numpy/core/include/numpy/npy_common.h +0 -1038
  464. numpy-1.9.3/numpy/core/include/numpy/npy_cpu.h +0 -122
  465. numpy-1.9.3/numpy/core/include/numpy/npy_endian.h +0 -49
  466. numpy-1.9.3/numpy/core/include/numpy/npy_math.h +0 -479
  467. numpy-1.9.3/numpy/core/include/numpy/numpyconfig.h +0 -35
  468. numpy-1.9.3/numpy/core/machar.py +0 -338
  469. numpy-1.9.3/numpy/core/memmap.py +0 -308
  470. numpy-1.9.3/numpy/core/numeric.py +0 -2842
  471. numpy-1.9.3/numpy/core/numerictypes.py +0 -1042
  472. numpy-1.9.3/numpy/core/records.py +0 -804
  473. numpy-1.9.3/numpy/core/setup.py +0 -1016
  474. numpy-1.9.3/numpy/core/setup_common.py +0 -330
  475. numpy-1.9.3/numpy/core/shape_base.py +0 -277
  476. numpy-1.9.3/numpy/core/src/multiarray/alloc.c +0 -241
  477. numpy-1.9.3/numpy/core/src/multiarray/arrayobject.c +0 -1791
  478. numpy-1.9.3/numpy/core/src/multiarray/arraytypes.c.src +0 -4372
  479. numpy-1.9.3/numpy/core/src/multiarray/arraytypes.h +0 -13
  480. numpy-1.9.3/numpy/core/src/multiarray/buffer.c +0 -954
  481. numpy-1.9.3/numpy/core/src/multiarray/calculation.c +0 -1229
  482. numpy-1.9.3/numpy/core/src/multiarray/common.c +0 -798
  483. numpy-1.9.3/numpy/core/src/multiarray/common.h +0 -328
  484. numpy-1.9.3/numpy/core/src/multiarray/conversion_utils.c +0 -1240
  485. numpy-1.9.3/numpy/core/src/multiarray/convert.c +0 -589
  486. numpy-1.9.3/numpy/core/src/multiarray/convert_datatype.c +0 -2199
  487. numpy-1.9.3/numpy/core/src/multiarray/ctors.c +0 -3785
  488. numpy-1.9.3/numpy/core/src/multiarray/datetime.c +0 -3823
  489. numpy-1.9.3/numpy/core/src/multiarray/datetime_busday.c +0 -1322
  490. numpy-1.9.3/numpy/core/src/multiarray/datetime_busdaycal.c +0 -552
  491. numpy-1.9.3/numpy/core/src/multiarray/datetime_strings.c +0 -1772
  492. numpy-1.9.3/numpy/core/src/multiarray/descriptor.c +0 -3658
  493. numpy-1.9.3/numpy/core/src/multiarray/dtype_transfer.c +0 -4232
  494. numpy-1.9.3/numpy/core/src/multiarray/einsum.c.src +0 -3013
  495. numpy-1.9.3/numpy/core/src/multiarray/getset.c +0 -984
  496. numpy-1.9.3/numpy/core/src/multiarray/hashdescr.c +0 -319
  497. numpy-1.9.3/numpy/core/src/multiarray/item_selection.c +0 -2711
  498. numpy-1.9.3/numpy/core/src/multiarray/iterators.c +0 -2160
  499. numpy-1.9.3/numpy/core/src/multiarray/lowlevel_strided_loops.c.src +0 -1767
  500. numpy-1.9.3/numpy/core/src/multiarray/mapping.c +0 -3316
  501. numpy-1.9.3/numpy/core/src/multiarray/mapping.h +0 -73
  502. numpy-1.9.3/numpy/core/src/multiarray/methods.c +0 -2497
  503. numpy-1.9.3/numpy/core/src/multiarray/multiarray_tests.c.src +0 -977
  504. numpy-1.9.3/numpy/core/src/multiarray/multiarraymodule.c +0 -4200
  505. numpy-1.9.3/numpy/core/src/multiarray/multiarraymodule.h +0 -4
  506. numpy-1.9.3/numpy/core/src/multiarray/nditer_api.c +0 -2809
  507. numpy-1.9.3/numpy/core/src/multiarray/nditer_constr.c +0 -3159
  508. numpy-1.9.3/numpy/core/src/multiarray/nditer_pywrap.c +0 -2492
  509. numpy-1.9.3/numpy/core/src/multiarray/number.c +0 -1057
  510. numpy-1.9.3/numpy/core/src/multiarray/number.h +0 -76
  511. numpy-1.9.3/numpy/core/src/multiarray/numpymemoryview.c +0 -309
  512. numpy-1.9.3/numpy/core/src/multiarray/numpyos.c +0 -683
  513. numpy-1.9.3/numpy/core/src/multiarray/scalarapi.c +0 -861
  514. numpy-1.9.3/numpy/core/src/multiarray/scalartypes.c.src +0 -4270
  515. numpy-1.9.3/numpy/core/src/multiarray/scalartypes.h +0 -52
  516. numpy-1.9.3/numpy/core/src/multiarray/shape.c +0 -1141
  517. numpy-1.9.3/numpy/core/src/multiarray/ucsnarrow.c +0 -173
  518. numpy-1.9.3/numpy/core/src/npymath/ieee754.c.src +0 -814
  519. numpy-1.9.3/numpy/core/src/npymath/npy_math.c.src +0 -527
  520. numpy-1.9.3/numpy/core/src/npymath/npy_math_complex.c.src +0 -291
  521. numpy-1.9.3/numpy/core/src/npymath/npy_math_private.h +0 -539
  522. numpy-1.9.3/numpy/core/src/npysort/heapsort.c.src +0 -341
  523. numpy-1.9.3/numpy/core/src/npysort/mergesort.c.src +0 -428
  524. numpy-1.9.3/numpy/core/src/npysort/npysort_common.h +0 -367
  525. numpy-1.9.3/numpy/core/src/npysort/quicksort.c.src +0 -363
  526. numpy-1.9.3/numpy/core/src/npysort/selection.c.src +0 -474
  527. numpy-1.9.3/numpy/core/src/private/npy_config.h +0 -68
  528. numpy-1.9.3/numpy/core/src/private/npy_partition.h.src +0 -138
  529. numpy-1.9.3/numpy/core/src/private/npy_sort.h +0 -194
  530. numpy-1.9.3/numpy/core/src/private/scalarmathmodule.h.src +0 -42
  531. numpy-1.9.3/numpy/core/src/private/ufunc_override.h +0 -384
  532. numpy-1.9.3/numpy/core/src/scalarmathmodule.c.src +0 -1980
  533. numpy-1.9.3/numpy/core/src/umath/funcs.inc.src +0 -715
  534. numpy-1.9.3/numpy/core/src/umath/loops.c.src +0 -2654
  535. numpy-1.9.3/numpy/core/src/umath/loops.h.src +0 -501
  536. numpy-1.9.3/numpy/core/src/umath/operand_flag_tests.c.src +0 -105
  537. numpy-1.9.3/numpy/core/src/umath/simd.inc.src +0 -881
  538. numpy-1.9.3/numpy/core/src/umath/test_rational.c.src +0 -1404
  539. numpy-1.9.3/numpy/core/src/umath/ufunc_object.c +0 -5520
  540. numpy-1.9.3/numpy/core/src/umath/ufunc_type_resolution.c +0 -2164
  541. numpy-1.9.3/numpy/core/src/umath/umath_tests.c.src +0 -341
  542. numpy-1.9.3/numpy/core/src/umath/umathmodule.c +0 -561
  543. numpy-1.9.3/numpy/core/tests/test_abc.py +0 -45
  544. numpy-1.9.3/numpy/core/tests/test_api.py +0 -514
  545. numpy-1.9.3/numpy/core/tests/test_arrayprint.py +0 -167
  546. numpy-1.9.3/numpy/core/tests/test_blasdot.py +0 -249
  547. numpy-1.9.3/numpy/core/tests/test_datetime.py +0 -1781
  548. numpy-1.9.3/numpy/core/tests/test_defchararray.py +0 -642
  549. numpy-1.9.3/numpy/core/tests/test_deprecations.py +0 -512
  550. numpy-1.9.3/numpy/core/tests/test_dtype.py +0 -542
  551. numpy-1.9.3/numpy/core/tests/test_einsum.py +0 -583
  552. numpy-1.9.3/numpy/core/tests/test_errstate.py +0 -51
  553. numpy-1.9.3/numpy/core/tests/test_function_base.py +0 -111
  554. numpy-1.9.3/numpy/core/tests/test_getlimits.py +0 -86
  555. numpy-1.9.3/numpy/core/tests/test_half.py +0 -439
  556. numpy-1.9.3/numpy/core/tests/test_indexerrors.py +0 -127
  557. numpy-1.9.3/numpy/core/tests/test_indexing.py +0 -1014
  558. numpy-1.9.3/numpy/core/tests/test_item_selection.py +0 -70
  559. numpy-1.9.3/numpy/core/tests/test_machar.py +0 -30
  560. numpy-1.9.3/numpy/core/tests/test_memmap.py +0 -127
  561. numpy-1.9.3/numpy/core/tests/test_multiarray.py +0 -4645
  562. numpy-1.9.3/numpy/core/tests/test_multiarray_assignment.py +0 -80
  563. numpy-1.9.3/numpy/core/tests/test_nditer.py +0 -2630
  564. numpy-1.9.3/numpy/core/tests/test_numeric.py +0 -2117
  565. numpy-1.9.3/numpy/core/tests/test_numerictypes.py +0 -377
  566. numpy-1.9.3/numpy/core/tests/test_print.py +0 -245
  567. numpy-1.9.3/numpy/core/tests/test_records.py +0 -185
  568. numpy-1.9.3/numpy/core/tests/test_regression.py +0 -2115
  569. numpy-1.9.3/numpy/core/tests/test_scalarinherit.py +0 -34
  570. numpy-1.9.3/numpy/core/tests/test_scalarmath.py +0 -275
  571. numpy-1.9.3/numpy/core/tests/test_shape_base.py +0 -250
  572. numpy-1.9.3/numpy/core/tests/test_ufunc.py +0 -1153
  573. numpy-1.9.3/numpy/core/tests/test_umath.py +0 -1695
  574. numpy-1.9.3/numpy/core/tests/test_umath_complex.py +0 -537
  575. numpy-1.9.3/numpy/core/tests/test_unicode.py +0 -357
  576. numpy-1.9.3/numpy/distutils/__init__.py +0 -39
  577. numpy-1.9.3/numpy/distutils/ccompiler.py +0 -656
  578. numpy-1.9.3/numpy/distutils/command/autodist.py +0 -43
  579. numpy-1.9.3/numpy/distutils/command/build.py +0 -39
  580. numpy-1.9.3/numpy/distutils/command/build_clib.py +0 -284
  581. numpy-1.9.3/numpy/distutils/command/build_ext.py +0 -515
  582. numpy-1.9.3/numpy/distutils/command/config.py +0 -476
  583. numpy-1.9.3/numpy/distutils/exec_command.py +0 -618
  584. numpy-1.9.3/numpy/distutils/fcompiler/compaq.py +0 -128
  585. numpy-1.9.3/numpy/distutils/fcompiler/gnu.py +0 -390
  586. numpy-1.9.3/numpy/distutils/fcompiler/intel.py +0 -205
  587. numpy-1.9.3/numpy/distutils/fcompiler/pg.py +0 -60
  588. numpy-1.9.3/numpy/distutils/fcompiler/sun.py +0 -52
  589. numpy-1.9.3/numpy/distutils/intelccompiler.py +0 -45
  590. numpy-1.9.3/numpy/distutils/lib2def.py +0 -116
  591. numpy-1.9.3/numpy/distutils/mingw32ccompiler.py +0 -582
  592. numpy-1.9.3/numpy/distutils/misc_util.py +0 -2271
  593. numpy-1.9.3/numpy/distutils/npy_pkg_config.py +0 -464
  594. numpy-1.9.3/numpy/distutils/system_info.py +0 -2319
  595. numpy-1.9.3/numpy/distutils/tests/f2py_ext/tests/test_fib2.py +0 -13
  596. numpy-1.9.3/numpy/distutils/tests/f2py_f90_ext/tests/test_foo.py +0 -12
  597. numpy-1.9.3/numpy/distutils/tests/gen_ext/tests/test_fib3.py +0 -12
  598. numpy-1.9.3/numpy/distutils/tests/pyrex_ext/tests/test_primes.py +0 -14
  599. numpy-1.9.3/numpy/distutils/tests/swig_ext/tests/test_example.py +0 -18
  600. numpy-1.9.3/numpy/distutils/tests/swig_ext/tests/test_example2.py +0 -16
  601. numpy-1.9.3/numpy/distutils/tests/test_fcompiler_gnu.py +0 -53
  602. numpy-1.9.3/numpy/distutils/tests/test_fcompiler_intel.py +0 -36
  603. numpy-1.9.3/numpy/distutils/tests/test_misc_util.py +0 -75
  604. numpy-1.9.3/numpy/distutils/tests/test_npy_pkg_config.py +0 -98
  605. numpy-1.9.3/numpy/distutils/unixccompiler.py +0 -113
  606. numpy-1.9.3/numpy/doc/byteswapping.py +0 -147
  607. numpy-1.9.3/numpy/doc/creation.py +0 -144
  608. numpy-1.9.3/numpy/doc/glossary.py +0 -418
  609. numpy-1.9.3/numpy/doc/indexing.py +0 -437
  610. numpy-1.9.3/numpy/doc/structured_arrays.py +0 -223
  611. numpy-1.9.3/numpy/f2py/__init__.py +0 -49
  612. numpy-1.9.3/numpy/f2py/auxfuncs.py +0 -711
  613. numpy-1.9.3/numpy/f2py/capi_maps.py +0 -773
  614. numpy-1.9.3/numpy/f2py/cb_rules.py +0 -539
  615. numpy-1.9.3/numpy/f2py/cfuncs.py +0 -1224
  616. numpy-1.9.3/numpy/f2py/common_rules.py +0 -132
  617. numpy-1.9.3/numpy/f2py/crackfortran.py +0 -2870
  618. numpy-1.9.3/numpy/f2py/diagnose.py +0 -149
  619. numpy-1.9.3/numpy/f2py/f2py2e.py +0 -598
  620. numpy-1.9.3/numpy/f2py/f2py_testing.py +0 -46
  621. numpy-1.9.3/numpy/f2py/f90mod_rules.py +0 -246
  622. numpy-1.9.3/numpy/f2py/func2subr.py +0 -291
  623. numpy-1.9.3/numpy/f2py/rules.py +0 -1448
  624. numpy-1.9.3/numpy/f2py/setup.py +0 -129
  625. numpy-1.9.3/numpy/f2py/src/fortranobject.c +0 -972
  626. numpy-1.9.3/numpy/f2py/src/fortranobject.h +0 -162
  627. numpy-1.9.3/numpy/f2py/tests/src/array_from_pyobj/wrapmodule.c +0 -223
  628. numpy-1.9.3/numpy/f2py/tests/test_array_from_pyobj.py +0 -559
  629. numpy-1.9.3/numpy/f2py/tests/test_assumed_shape.py +0 -37
  630. numpy-1.9.3/numpy/f2py/tests/test_callback.py +0 -132
  631. numpy-1.9.3/numpy/f2py/tests/test_kind.py +0 -36
  632. numpy-1.9.3/numpy/f2py/tests/test_mixed.py +0 -41
  633. numpy-1.9.3/numpy/f2py/tests/test_regression.py +0 -32
  634. numpy-1.9.3/numpy/f2py/tests/test_return_character.py +0 -142
  635. numpy-1.9.3/numpy/f2py/tests/test_return_complex.py +0 -169
  636. numpy-1.9.3/numpy/f2py/tests/test_return_integer.py +0 -178
  637. numpy-1.9.3/numpy/f2py/tests/test_return_logical.py +0 -187
  638. numpy-1.9.3/numpy/f2py/tests/test_return_real.py +0 -203
  639. numpy-1.9.3/numpy/f2py/tests/test_size.py +0 -47
  640. numpy-1.9.3/numpy/f2py/tests/util.py +0 -353
  641. numpy-1.9.3/numpy/f2py/use_rules.py +0 -109
  642. numpy-1.9.3/numpy/fft/fftpack.c +0 -1501
  643. numpy-1.9.3/numpy/fft/fftpack.h +0 -28
  644. numpy-1.9.3/numpy/fft/fftpack.py +0 -1169
  645. numpy-1.9.3/numpy/fft/fftpack_litemodule.c +0 -371
  646. numpy-1.9.3/numpy/fft/info.py +0 -179
  647. numpy-1.9.3/numpy/fft/setup.py +0 -20
  648. numpy-1.9.3/numpy/fft/tests/test_fftpack.py +0 -75
  649. numpy-1.9.3/numpy/fft/tests/test_helper.py +0 -78
  650. numpy-1.9.3/numpy/lib/_iotools.py +0 -891
  651. numpy-1.9.3/numpy/lib/arraypad.py +0 -1475
  652. numpy-1.9.3/numpy/lib/arraysetops.py +0 -464
  653. numpy-1.9.3/numpy/lib/arrayterator.py +0 -226
  654. numpy-1.9.3/numpy/lib/financial.py +0 -737
  655. numpy-1.9.3/numpy/lib/format.py +0 -771
  656. numpy-1.9.3/numpy/lib/function_base.py +0 -3884
  657. numpy-1.9.3/numpy/lib/index_tricks.py +0 -869
  658. numpy-1.9.3/numpy/lib/info.py +0 -151
  659. numpy-1.9.3/numpy/lib/nanfunctions.py +0 -1158
  660. numpy-1.9.3/numpy/lib/npyio.py +0 -1871
  661. numpy-1.9.3/numpy/lib/polynomial.py +0 -1271
  662. numpy-1.9.3/numpy/lib/recfunctions.py +0 -1003
  663. numpy-1.9.3/numpy/lib/setup.py +0 -23
  664. numpy-1.9.3/numpy/lib/shape_base.py +0 -865
  665. numpy-1.9.3/numpy/lib/src/_compiled_base.c +0 -1761
  666. numpy-1.9.3/numpy/lib/stride_tricks.py +0 -123
  667. numpy-1.9.3/numpy/lib/tests/test__iotools.py +0 -326
  668. numpy-1.9.3/numpy/lib/tests/test__version.py +0 -57
  669. numpy-1.9.3/numpy/lib/tests/test_arraypad.py +0 -560
  670. numpy-1.9.3/numpy/lib/tests/test_arraysetops.py +0 -301
  671. numpy-1.9.3/numpy/lib/tests/test_financial.py +0 -160
  672. numpy-1.9.3/numpy/lib/tests/test_format.py +0 -716
  673. numpy-1.9.3/numpy/lib/tests/test_function_base.py +0 -2145
  674. numpy-1.9.3/numpy/lib/tests/test_index_tricks.py +0 -289
  675. numpy-1.9.3/numpy/lib/tests/test_io.py +0 -1754
  676. numpy-1.9.3/numpy/lib/tests/test_nanfunctions.py +0 -774
  677. numpy-1.9.3/numpy/lib/tests/test_polynomial.py +0 -177
  678. numpy-1.9.3/numpy/lib/tests/test_recfunctions.py +0 -705
  679. numpy-1.9.3/numpy/lib/tests/test_shape_base.py +0 -368
  680. numpy-1.9.3/numpy/lib/tests/test_stride_tricks.py +0 -238
  681. numpy-1.9.3/numpy/lib/tests/test_twodim_base.py +0 -504
  682. numpy-1.9.3/numpy/lib/tests/test_type_check.py +0 -328
  683. numpy-1.9.3/numpy/lib/twodim_base.py +0 -1003
  684. numpy-1.9.3/numpy/lib/type_check.py +0 -605
  685. numpy-1.9.3/numpy/lib/utils.py +0 -1176
  686. numpy-1.9.3/numpy/linalg/lapack_lite/python_xerbla.c +0 -47
  687. numpy-1.9.3/numpy/linalg/lapack_litemodule.c +0 -362
  688. numpy-1.9.3/numpy/linalg/linalg.py +0 -2136
  689. numpy-1.9.3/numpy/linalg/tests/test_build.py +0 -53
  690. numpy-1.9.3/numpy/linalg/tests/test_linalg.py +0 -1156
  691. numpy-1.9.3/numpy/linalg/tests/test_regression.py +0 -90
  692. numpy-1.9.3/numpy/linalg/umath_linalg.c.src +0 -3210
  693. numpy-1.9.3/numpy/ma/__init__.py +0 -58
  694. numpy-1.9.3/numpy/ma/bench.py +0 -166
  695. numpy-1.9.3/numpy/ma/core.py +0 -7374
  696. numpy-1.9.3/numpy/ma/extras.py +0 -1932
  697. numpy-1.9.3/numpy/ma/mrecords.py +0 -734
  698. numpy-1.9.3/numpy/ma/setup.py +0 -20
  699. numpy-1.9.3/numpy/ma/tests/test_core.py +0 -3706
  700. numpy-1.9.3/numpy/ma/tests/test_extras.py +0 -954
  701. numpy-1.9.3/numpy/ma/tests/test_mrecords.py +0 -521
  702. numpy-1.9.3/numpy/ma/tests/test_old_ma.py +0 -869
  703. numpy-1.9.3/numpy/ma/tests/test_regression.py +0 -75
  704. numpy-1.9.3/numpy/ma/tests/test_subclassing.py +0 -236
  705. numpy-1.9.3/numpy/ma/testutils.py +0 -240
  706. numpy-1.9.3/numpy/ma/timer_comparison.py +0 -459
  707. numpy-1.9.3/numpy/matlib.py +0 -358
  708. numpy-1.9.3/numpy/matrixlib/defmatrix.py +0 -1094
  709. numpy-1.9.3/numpy/matrixlib/tests/test_defmatrix.py +0 -400
  710. numpy-1.9.3/numpy/matrixlib/tests/test_multiarray.py +0 -18
  711. numpy-1.9.3/numpy/matrixlib/tests/test_numeric.py +0 -10
  712. numpy-1.9.3/numpy/matrixlib/tests/test_regression.py +0 -34
  713. numpy-1.9.3/numpy/polynomial/_polybase.py +0 -962
  714. numpy-1.9.3/numpy/polynomial/chebyshev.py +0 -2056
  715. numpy-1.9.3/numpy/polynomial/hermite.py +0 -1789
  716. numpy-1.9.3/numpy/polynomial/hermite_e.py +0 -1786
  717. numpy-1.9.3/numpy/polynomial/laguerre.py +0 -1781
  718. numpy-1.9.3/numpy/polynomial/legendre.py +0 -1809
  719. numpy-1.9.3/numpy/polynomial/polytemplate.py +0 -927
  720. numpy-1.9.3/numpy/polynomial/polyutils.py +0 -403
  721. numpy-1.9.3/numpy/random/mtrand/distributions.c +0 -892
  722. numpy-1.9.3/numpy/random/mtrand/mtrand.c +0 -36656
  723. numpy-1.9.3/numpy/random/mtrand/mtrand.pyx +0 -4706
  724. numpy-1.9.3/numpy/random/setup.py +0 -74
  725. numpy-1.9.3/numpy/random/tests/test_random.py +0 -707
  726. numpy-1.9.3/numpy/random/tests/test_regression.py +0 -86
  727. numpy-1.9.3/numpy/setup.py +0 -27
  728. numpy-1.9.3/numpy/testing/__init__.py +0 -16
  729. numpy-1.9.3/numpy/testing/decorators.py +0 -271
  730. numpy-1.9.3/numpy/testing/noseclasses.py +0 -353
  731. numpy-1.9.3/numpy/testing/nosetester.py +0 -504
  732. numpy-1.9.3/numpy/testing/print_coercion_tables.py +0 -89
  733. numpy-1.9.3/numpy/testing/setup.py +0 -20
  734. numpy-1.9.3/numpy/testing/tests/test_decorators.py +0 -185
  735. numpy-1.9.3/numpy/testing/tests/test_utils.py +0 -558
  736. numpy-1.9.3/numpy/testing/utils.py +0 -1715
  737. numpy-1.9.3/numpy/tests/test_ctypeslib.py +0 -102
  738. numpy-1.9.3/numpy/tests/test_matlib.py +0 -55
  739. numpy-1.9.3/numpy/version.py +0 -10
  740. numpy-1.9.3/setup.py +0 -251
  741. numpy-1.9.3/site.cfg.example +0 -157
  742. numpy-1.9.3/tools/swig/README +0 -135
  743. numpy-1.9.3/tools/swig/numpy.i +0 -3085
  744. numpy-1.9.3/tools/swig/test/Array.i +0 -102
  745. numpy-1.9.3/tools/swig/test/Makefile +0 -34
  746. numpy-1.9.3/tools/swig/test/setup.py +0 -64
  747. numpy-1.9.3/tools/swig/test/testArray.py +0 -284
  748. numpy-1.9.3/tools/swig/test/testFarray.py +0 -159
  749. numpy-1.9.3/tools/swig/test/testFortran.py +0 -173
  750. numpy-1.9.3/tools/swig/test/testMatrix.py +0 -362
  751. numpy-1.9.3/tools/swig/test/testSuperTensor.py +0 -388
  752. numpy-1.9.3/tools/swig/test/testTensor.py +0 -402
  753. numpy-1.9.3/tools/swig/test/testVector.py +0 -381
  754. {numpy-1.9.3 → numpy-1.10.0.post2}/BENTO_BUILD.txt +0 -0
  755. {numpy-1.9.3 → numpy-1.10.0.post2}/COMPATIBILITY +0 -0
  756. {numpy-1.9.3 → numpy-1.10.0.post2}/DEV_README.txt +0 -0
  757. {numpy-1.9.3 → numpy-1.10.0.post2}/README.txt +0 -0
  758. {numpy-1.9.3 → numpy-1.10.0.post2}/THANKS.txt +0 -0
  759. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/Makefile +0 -0
  760. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/BUGS.txt +0 -0
  761. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/FAQ.txt +0 -0
  762. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/HISTORY.txt +0 -0
  763. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/Makefile +0 -0
  764. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/OLDNEWS.txt +0 -0
  765. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/README.txt +0 -0
  766. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/Release-1.x.txt +0 -0
  767. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/Release-2.x.txt +0 -0
  768. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/Release-3.x.txt +0 -0
  769. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/Release-4.x.txt +0 -0
  770. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/TESTING.txt +0 -0
  771. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/THANKS.txt +0 -0
  772. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/TODO.txt +0 -0
  773. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/apps.tex +0 -0
  774. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/bugs.tex +0 -0
  775. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/collectinput.py +0 -0
  776. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/commands.tex +0 -0
  777. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/default.css +0 -0
  778. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/docutils.conf +0 -0
  779. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/ex1/arr.f +0 -0
  780. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/ex1/bar.f +0 -0
  781. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/ex1/foo.f +0 -0
  782. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/ex1/foobar-smart.f90 +0 -0
  783. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/ex1/foobar.f90 +0 -0
  784. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/ex1/foobarmodule.tex +0 -0
  785. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/ex1/runme +0 -0
  786. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/f2py.1 +0 -0
  787. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/f2py2e.tex +0 -0
  788. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/README.txt +0 -0
  789. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/aerostructure.jpg +0 -0
  790. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/flow.jpg +0 -0
  791. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/mk_html.sh +0 -0
  792. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/mk_pdf.sh +0 -0
  793. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/mk_ps.sh +0 -0
  794. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/src/examples/exp1.f +0 -0
  795. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/src/examples/exp1mess.txt +0 -0
  796. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/src/examples/exp1session.txt +0 -0
  797. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/src/examples/foo.pyf +0 -0
  798. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/src/examples/foom.pyf +0 -0
  799. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/structure.jpg +0 -0
  800. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/fortranobject.tex +0 -0
  801. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/hello.f +0 -0
  802. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/index.html +0 -0
  803. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/intro.tex +0 -0
  804. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/multiarray/array_from_pyobj.c +0 -0
  805. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/multiarray/bar.c +0 -0
  806. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/multiarray/foo.f +0 -0
  807. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/multiarray/fortran_array_from_pyobj.txt +0 -0
  808. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/multiarray/fun.pyf +0 -0
  809. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/multiarray/run.pyf +0 -0
  810. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/multiarray/transpose.txt +0 -0
  811. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/multiarrays.txt +0 -0
  812. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/notes.tex +0 -0
  813. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/oldnews.html +0 -0
  814. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/options.tex +0 -0
  815. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/pyforttest.pyf +0 -0
  816. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/pytest.py +0 -0
  817. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/python9.tex +0 -0
  818. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/signaturefile.tex +0 -0
  819. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/simple.f +0 -0
  820. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/simple_session.dat +0 -0
  821. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/using_F_compiler.txt +0 -0
  822. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/win32_notes.txt +0 -0
  823. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/postprocess.py +0 -0
  824. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/release/1.3.0-notes.rst +0 -0
  825. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/release/1.4.0-notes.rst +0 -0
  826. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/release/1.5.0-notes.rst +0 -0
  827. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/release/1.6.0-notes.rst +0 -0
  828. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/release/1.6.1-notes.rst +0 -0
  829. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/release/1.6.2-notes.rst +0 -0
  830. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/release/1.7.0-notes.rst +0 -0
  831. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/release/1.7.1-notes.rst +0 -0
  832. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/release/1.7.2-notes.rst +0 -0
  833. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/release/1.8.0-notes.rst +0 -0
  834. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/release/1.8.1-notes.rst +0 -0
  835. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/release/1.8.2-notes.rst +0 -0
  836. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/release/1.9.0-notes.rst +0 -0
  837. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/release/1.9.1-notes.rst +0 -0
  838. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/release/1.9.2-notes.rst +0 -0
  839. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/release/time_based_proposal.rst +0 -0
  840. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/.git +0 -0
  841. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/.gitignore +0 -0
  842. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/Makefile +0 -0
  843. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/README.rst +0 -0
  844. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_static/scipyshiny_small.png +0 -0
  845. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/layout.html +0 -0
  846. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/searchbox.html +0 -0
  847. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/sourcelink.html +0 -0
  848. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/css/extend.css +0 -0
  849. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/css/pygments.css +0 -0
  850. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/css/scipy-central.css +0 -0
  851. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/css/spc-bootstrap.css +0 -0
  852. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/css/spc-extend.css +0 -0
  853. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/all-icons.svg +0 -0
  854. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/contents.png +0 -0
  855. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/create-new-account-icon.png +0 -0
  856. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/external-link-icon-shrunk.png +0 -0
  857. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/external-link-icon.png +0 -0
  858. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/external-link-icon.svg +0 -0
  859. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/external-link-list-icon-tiniest.png +0 -0
  860. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/external-link-list-icon-tiny.png +0 -0
  861. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/external-link-list-icon.png +0 -0
  862. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ad.png +0 -0
  863. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ae.png +0 -0
  864. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-af.png +0 -0
  865. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ag.png +0 -0
  866. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ai.png +0 -0
  867. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-al.png +0 -0
  868. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-am.png +0 -0
  869. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ao.png +0 -0
  870. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-aq.png +0 -0
  871. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ar.png +0 -0
  872. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-as.png +0 -0
  873. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-at.png +0 -0
  874. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-au.png +0 -0
  875. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-aw.png +0 -0
  876. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-az.png +0 -0
  877. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ba.png +0 -0
  878. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bb.png +0 -0
  879. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bd.png +0 -0
  880. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-be.png +0 -0
  881. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bf.png +0 -0
  882. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bg.png +0 -0
  883. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bh.png +0 -0
  884. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bi.png +0 -0
  885. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bj.png +0 -0
  886. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bl.png +0 -0
  887. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bm.png +0 -0
  888. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bn.png +0 -0
  889. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bo.png +0 -0
  890. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-br.png +0 -0
  891. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bs.png +0 -0
  892. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bt.png +0 -0
  893. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bw.png +0 -0
  894. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-by.png +0 -0
  895. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bz.png +0 -0
  896. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ca.png +0 -0
  897. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cc.png +0 -0
  898. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cd.png +0 -0
  899. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cf.png +0 -0
  900. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cg.png +0 -0
  901. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ch.png +0 -0
  902. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ci.png +0 -0
  903. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ck.png +0 -0
  904. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cl.png +0 -0
  905. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cm.png +0 -0
  906. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cn.png +0 -0
  907. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-co.png +0 -0
  908. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cr.png +0 -0
  909. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cu.png +0 -0
  910. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cv.png +0 -0
  911. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cw.png +0 -0
  912. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cx.png +0 -0
  913. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cy.png +0 -0
  914. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cz.png +0 -0
  915. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-de.png +0 -0
  916. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-dj.png +0 -0
  917. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-dk.png +0 -0
  918. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-dm.png +0 -0
  919. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-do.png +0 -0
  920. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-dz.png +0 -0
  921. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ec.png +0 -0
  922. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ee.png +0 -0
  923. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-eg.png +0 -0
  924. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-er.png +0 -0
  925. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-es.png +0 -0
  926. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-et.png +0 -0
  927. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-fi.png +0 -0
  928. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-fj.png +0 -0
  929. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-fk.png +0 -0
  930. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-fm.png +0 -0
  931. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-fo.png +0 -0
  932. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-fr.png +0 -0
  933. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ga.png +0 -0
  934. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gb.png +0 -0
  935. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gd.png +0 -0
  936. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ge.png +0 -0
  937. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gf.png +0 -0
  938. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gg.png +0 -0
  939. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gh.png +0 -0
  940. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gi.png +0 -0
  941. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gl.png +0 -0
  942. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gm.png +0 -0
  943. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gn.png +0 -0
  944. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gq.png +0 -0
  945. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gr.png +0 -0
  946. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gs.png +0 -0
  947. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gt.png +0 -0
  948. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gu.png +0 -0
  949. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gw.png +0 -0
  950. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gy.png +0 -0
  951. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-hk.png +0 -0
  952. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-hm.png +0 -0
  953. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-hn.png +0 -0
  954. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-hr.png +0 -0
  955. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ht.png +0 -0
  956. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-hu.png +0 -0
  957. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-id.png +0 -0
  958. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ie.png +0 -0
  959. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-il.png +0 -0
  960. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-im.png +0 -0
  961. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-in.png +0 -0
  962. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-io.png +0 -0
  963. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-iq.png +0 -0
  964. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ir.png +0 -0
  965. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-is.png +0 -0
  966. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-it.png +0 -0
  967. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-je.png +0 -0
  968. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-jm.png +0 -0
  969. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-jo.png +0 -0
  970. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-jp.png +0 -0
  971. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ke.png +0 -0
  972. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-kg.png +0 -0
  973. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-kh.png +0 -0
  974. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ki.png +0 -0
  975. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-km.png +0 -0
  976. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-kn.png +0 -0
  977. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-kp.png +0 -0
  978. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-kr.png +0 -0
  979. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-kw.png +0 -0
  980. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ky.png +0 -0
  981. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-kz.png +0 -0
  982. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-la.png +0 -0
  983. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-lb.png +0 -0
  984. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-lc.png +0 -0
  985. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-li.png +0 -0
  986. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-lk.png +0 -0
  987. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-lr.png +0 -0
  988. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ls.png +0 -0
  989. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-lt.png +0 -0
  990. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-lu.png +0 -0
  991. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-lv.png +0 -0
  992. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ly.png +0 -0
  993. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ma.png +0 -0
  994. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mc.png +0 -0
  995. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-md.png +0 -0
  996. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-me.png +0 -0
  997. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mf.png +0 -0
  998. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mg.png +0 -0
  999. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mh.png +0 -0
  1000. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mk.png +0 -0
  1001. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ml.png +0 -0
  1002. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mm.png +0 -0
  1003. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mn.png +0 -0
  1004. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mo.png +0 -0
  1005. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mp.png +0 -0
  1006. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mq.png +0 -0
  1007. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mr.png +0 -0
  1008. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ms.png +0 -0
  1009. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mt.png +0 -0
  1010. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mu.png +0 -0
  1011. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mv.png +0 -0
  1012. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mw.png +0 -0
  1013. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mx.png +0 -0
  1014. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-my.png +0 -0
  1015. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mz.png +0 -0
  1016. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-na.png +0 -0
  1017. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-nc.png +0 -0
  1018. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ne.png +0 -0
  1019. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-nf.png +0 -0
  1020. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ng.png +0 -0
  1021. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ni.png +0 -0
  1022. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-nl.png +0 -0
  1023. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-no.png +0 -0
  1024. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-np.png +0 -0
  1025. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-nr.png +0 -0
  1026. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-nu.png +0 -0
  1027. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-nz.png +0 -0
  1028. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-om.png +0 -0
  1029. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pa.png +0 -0
  1030. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pe.png +0 -0
  1031. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pf.png +0 -0
  1032. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pg.png +0 -0
  1033. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ph.png +0 -0
  1034. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pk.png +0 -0
  1035. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pl.png +0 -0
  1036. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pm.png +0 -0
  1037. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pn.png +0 -0
  1038. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pr.png +0 -0
  1039. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ps.png +0 -0
  1040. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pt.png +0 -0
  1041. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pw.png +0 -0
  1042. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-py.png +0 -0
  1043. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-qa.png +0 -0
  1044. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-re.png +0 -0
  1045. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ro.png +0 -0
  1046. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-rs.png +0 -0
  1047. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ru.png +0 -0
  1048. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-rw.png +0 -0
  1049. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sa.png +0 -0
  1050. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sb.png +0 -0
  1051. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sc.png +0 -0
  1052. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sd.png +0 -0
  1053. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-se.png +0 -0
  1054. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sg.png +0 -0
  1055. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sh.png +0 -0
  1056. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-si.png +0 -0
  1057. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sj.png +0 -0
  1058. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sk.png +0 -0
  1059. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sl.png +0 -0
  1060. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sm.png +0 -0
  1061. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sn.png +0 -0
  1062. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-so.png +0 -0
  1063. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sr.png +0 -0
  1064. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-st.png +0 -0
  1065. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sv.png +0 -0
  1066. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sy.png +0 -0
  1067. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sz.png +0 -0
  1068. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tc.png +0 -0
  1069. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-td.png +0 -0
  1070. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tf.png +0 -0
  1071. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tg.png +0 -0
  1072. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-th.png +0 -0
  1073. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tj.png +0 -0
  1074. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tk.png +0 -0
  1075. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tl.png +0 -0
  1076. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tm.png +0 -0
  1077. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tn.png +0 -0
  1078. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-to.png +0 -0
  1079. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tr.png +0 -0
  1080. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tt.png +0 -0
  1081. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tv.png +0 -0
  1082. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tw.png +0 -0
  1083. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tz.png +0 -0
  1084. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ua.png +0 -0
  1085. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ug.png +0 -0
  1086. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-um.png +0 -0
  1087. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-us.png +0 -0
  1088. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-uy.png +0 -0
  1089. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-uz.png +0 -0
  1090. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-va.png +0 -0
  1091. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-vc.png +0 -0
  1092. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ve.png +0 -0
  1093. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-vg.png +0 -0
  1094. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-vi.png +0 -0
  1095. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-vn.png +0 -0
  1096. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-vu.png +0 -0
  1097. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-wf.png +0 -0
  1098. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ws.png +0 -0
  1099. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ye.png +0 -0
  1100. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-za.png +0 -0
  1101. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-zm.png +0 -0
  1102. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-zw.png +0 -0
  1103. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/glyphicons-halflings-white.png +0 -0
  1104. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/glyphicons-halflings.png +0 -0
  1105. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/important-icon.png +0 -0
  1106. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/information-icon.png +0 -0
  1107. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/internet-web-browser.png +0 -0
  1108. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/multiple-file-icon-shrunk.png +0 -0
  1109. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/multiple-file-icon.png +0 -0
  1110. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/multiple-file-icon.svg +0 -0
  1111. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/multiple-file-list-icon-tiny.png +0 -0
  1112. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/multiple-file-list-icon.png +0 -0
  1113. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/navigation.png +0 -0
  1114. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/person-list-icon-tiny.png +0 -0
  1115. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/person-list-icon.png +0 -0
  1116. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/scipy-logo.png +0 -0
  1117. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/scipy_org_logo.gif +0 -0
  1118. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/scipycentral_logo.png +0 -0
  1119. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/scipyshiny_small.png +0 -0
  1120. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/send-email-icon.png +0 -0
  1121. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/single-file-icon-shrunk.png +0 -0
  1122. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/single-file-icon.png +0 -0
  1123. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/single-file-icon.svg +0 -0
  1124. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/single-file-list-icon-tiniest.png +0 -0
  1125. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/single-file-list-icon-tiny.png +0 -0
  1126. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/single-file-list-icon.png +0 -0
  1127. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/transparent-pixel.gif +0 -0
  1128. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/ui-anim_basic_16x16.gif +0 -0
  1129. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/js/copybutton.js +0 -0
  1130. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/accordion.less +0 -0
  1131. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/alerts.less +0 -0
  1132. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/bootstrap.less +0 -0
  1133. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/breadcrumbs.less +0 -0
  1134. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/button-groups.less +0 -0
  1135. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/buttons.less +0 -0
  1136. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/carousel.less +0 -0
  1137. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/close.less +0 -0
  1138. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/code.less +0 -0
  1139. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/component-animations.less +0 -0
  1140. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/dropdowns.less +0 -0
  1141. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/forms.less +0 -0
  1142. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/grid.less +0 -0
  1143. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/hero-unit.less +0 -0
  1144. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/labels-badges.less +0 -0
  1145. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/layouts.less +0 -0
  1146. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/media.less +0 -0
  1147. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/mixins.less +0 -0
  1148. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/modals.less +0 -0
  1149. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/navbar.less +0 -0
  1150. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/navs.less +0 -0
  1151. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/pager.less +0 -0
  1152. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/pagination.less +0 -0
  1153. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/popovers.less +0 -0
  1154. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/progress-bars.less +0 -0
  1155. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/reset.less +0 -0
  1156. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/responsive-1200px-min.less +0 -0
  1157. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/responsive-767px-max.less +0 -0
  1158. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/responsive-768px-979px.less +0 -0
  1159. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/responsive-navbar.less +0 -0
  1160. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/responsive-utilities.less +0 -0
  1161. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/responsive.less +0 -0
  1162. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/scaffolding.less +0 -0
  1163. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/sprites.less +0 -0
  1164. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/tables.less +0 -0
  1165. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/thumbnails.less +0 -0
  1166. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/tooltip.less +0 -0
  1167. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/type.less +0 -0
  1168. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/utilities.less +0 -0
  1169. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/variables.less +0 -0
  1170. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/wells.less +0 -0
  1171. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/spc-bootstrap.less +0 -0
  1172. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/spc-content.less +0 -0
  1173. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/spc-extend.less +0 -0
  1174. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/spc-footer.less +0 -0
  1175. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/spc-header.less +0 -0
  1176. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/spc-rightsidebar.less +0 -0
  1177. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/spc-utils.less +0 -0
  1178. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/scipy.css_t +0 -0
  1179. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/theme.conf +0 -0
  1180. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/conf.py +0 -0
  1181. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/index.rst +0 -0
  1182. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/test_autodoc.rst +0 -0
  1183. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/test_autodoc_2.rst +0 -0
  1184. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/test_autodoc_3.rst +0 -0
  1185. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/test_autodoc_4.rst +0 -0
  1186. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/test_optimize.rst +0 -0
  1187. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/_templates/autosummary/class.rst +0 -0
  1188. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/_templates/indexcontent.html +0 -0
  1189. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/_templates/indexsidebar.html +0 -0
  1190. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/_templates/layout.html +0 -0
  1191. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/about.rst +0 -0
  1192. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/bugs.rst +0 -0
  1193. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/contents.rst +0 -0
  1194. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/dev/gitwash/configure_git.rst +0 -0
  1195. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/dev/gitwash/development_setup.rst +0 -0
  1196. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/dev/gitwash/dot2_dot3.rst +0 -0
  1197. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/dev/gitwash/following_latest.rst +0 -0
  1198. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/dev/gitwash/forking_button.png +0 -0
  1199. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/dev/gitwash/git_development.rst +0 -0
  1200. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/dev/gitwash/git_intro.rst +0 -0
  1201. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/dev/gitwash/git_resources.rst +0 -0
  1202. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/dev/gitwash/pull_button.png +0 -0
  1203. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/dev/gitwash_links.txt +0 -0
  1204. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/advanced.rst +0 -0
  1205. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/allocarr.f90 +0 -0
  1206. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/allocarr_session.dat +0 -0
  1207. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/array.f +0 -0
  1208. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/array_session.dat +0 -0
  1209. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/calculate.f +0 -0
  1210. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/calculate_session.dat +0 -0
  1211. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/callback.f +0 -0
  1212. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/callback2.pyf +0 -0
  1213. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/callback_session.dat +0 -0
  1214. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/common.f +0 -0
  1215. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/common_session.dat +0 -0
  1216. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/compile_session.dat +0 -0
  1217. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/distutils.rst +0 -0
  1218. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/extcallback.f +0 -0
  1219. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/extcallback_session.dat +0 -0
  1220. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/fib1.f +0 -0
  1221. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/fib1.pyf +0 -0
  1222. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/fib2.pyf +0 -0
  1223. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/fib3.f +0 -0
  1224. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/ftype.f +0 -0
  1225. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/ftype_session.dat +0 -0
  1226. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/getting-started.rst +0 -0
  1227. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/index.rst +0 -0
  1228. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/moddata.f90 +0 -0
  1229. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/moddata_session.dat +0 -0
  1230. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/python-usage.rst +0 -0
  1231. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/run_main_session.dat +0 -0
  1232. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/scalar.f +0 -0
  1233. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/scalar_session.dat +0 -0
  1234. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/setup_example.py +0 -0
  1235. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/signature-file.rst +0 -0
  1236. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/spam.pyf +0 -0
  1237. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/spam_session.dat +0 -0
  1238. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/string.f +0 -0
  1239. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/string_session.dat +0 -0
  1240. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/usage.rst +0 -0
  1241. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/var.pyf +0 -0
  1242. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/var_session.dat +0 -0
  1243. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/glossary.rst +0 -0
  1244. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/license.rst +0 -0
  1245. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/neps/datetime-proposal.rst +0 -0
  1246. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/neps/datetime-proposal3.rst +0 -0
  1247. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/neps/deferred-ufunc-evaluation.rst +0 -0
  1248. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/neps/generalized-ufuncs.rst +0 -0
  1249. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/neps/groupby_additions.rst +0 -0
  1250. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/neps/index.rst +0 -0
  1251. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/neps/math_config_clean.rst +0 -0
  1252. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/neps/missing-data.rst +0 -0
  1253. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/neps/new-iterator-ufunc.rst +0 -0
  1254. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/neps/newbugtracker.rst +0 -0
  1255. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/neps/npy-format.rst +0 -0
  1256. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/neps/structured_array_extensions.rst +0 -0
  1257. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/neps/ufunc-overrides.rst +0 -0
  1258. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/neps/warnfix.rst +0 -0
  1259. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/arrays.datetime.rst +0 -0
  1260. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/arrays.nditer.rst +0 -0
  1261. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/arrays.rst +0 -0
  1262. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/c-api.deprecations.rst +0 -0
  1263. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/c-api.rst +0 -0
  1264. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/distutils.rst +0 -0
  1265. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/figures/dtype-hierarchy.dia +0 -0
  1266. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/figures/dtype-hierarchy.pdf +0 -0
  1267. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/figures/dtype-hierarchy.png +0 -0
  1268. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/figures/threefundamental.fig +0 -0
  1269. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/figures/threefundamental.pdf +0 -0
  1270. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/figures/threefundamental.png +0 -0
  1271. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/internals.rst +0 -0
  1272. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/maskedarray.baseclass.rst +0 -0
  1273. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/maskedarray.generic.rst +0 -0
  1274. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/maskedarray.rst +0 -0
  1275. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.array-creation.rst +0 -0
  1276. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.bitwise.rst +0 -0
  1277. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.char.rst +0 -0
  1278. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.ctypeslib.rst +0 -0
  1279. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.datetime.rst +0 -0
  1280. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.dtype.rst +0 -0
  1281. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.dual.rst +0 -0
  1282. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.emath.rst +0 -0
  1283. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.err.rst +0 -0
  1284. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.fft.rst +0 -0
  1285. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.financial.rst +0 -0
  1286. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.functional.rst +0 -0
  1287. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.help.rst +0 -0
  1288. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.indexing.rst +0 -0
  1289. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.logic.rst +0 -0
  1290. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.math.rst +0 -0
  1291. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.matlib.rst +0 -0
  1292. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.numarray.rst +0 -0
  1293. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.oldnumeric.rst +0 -0
  1294. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.other.rst +0 -0
  1295. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.padding.rst +0 -0
  1296. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.chebyshev.rst +0 -0
  1297. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.classes.rst +0 -0
  1298. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.hermite.rst +0 -0
  1299. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.hermite_e.rst +0 -0
  1300. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.laguerre.rst +0 -0
  1301. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.legendre.rst +0 -0
  1302. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.package.rst +0 -0
  1303. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.poly1d.rst +0 -0
  1304. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.polynomial.rst +0 -0
  1305. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.rst +0 -0
  1306. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.random.rst +0 -0
  1307. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.rst +0 -0
  1308. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.set.rst +0 -0
  1309. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.testing.rst +0 -0
  1310. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.window.rst +0 -0
  1311. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/swig.rst +0 -0
  1312. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/user/basics.broadcasting.rst +0 -0
  1313. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/user/basics.byteswapping.rst +0 -0
  1314. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/user/basics.creation.rst +0 -0
  1315. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/user/basics.indexing.rst +0 -0
  1316. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/user/basics.io.rst +0 -0
  1317. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/user/basics.rst +0 -0
  1318. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/user/basics.subclassing.rst +0 -0
  1319. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/user/basics.types.rst +0 -0
  1320. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/user/c-info.rst +0 -0
  1321. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/user/howtofind.rst +0 -0
  1322. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/user/index.rst +0 -0
  1323. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/user/introduction.rst +0 -0
  1324. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/user/misc.rst +0 -0
  1325. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/user/performance.rst +0 -0
  1326. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/user/whatisnumpy.rst +0 -0
  1327. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/.git +0 -0
  1328. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/.gitignore +0 -0
  1329. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/.travis.yml +0 -0
  1330. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/LICENSE.txt +0 -0
  1331. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/MANIFEST.in +0 -0
  1332. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/README.rst +0 -0
  1333. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/__init__.py +0 -0
  1334. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/comment_eater.py +0 -0
  1335. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/compiler_unparse.py +0 -0
  1336. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/docscrape.py +0 -0
  1337. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/docscrape_sphinx.py +0 -0
  1338. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/linkcode.py +0 -0
  1339. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/numpydoc.py +0 -0
  1340. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/phantom_import.py +0 -0
  1341. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/plot_directive.py +0 -0
  1342. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/tests/test_docscrape.py +0 -0
  1343. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/tests/test_linkcode.py +0 -0
  1344. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/tests/test_phantom_import.py +0 -0
  1345. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/tests/test_plot_directive.py +0 -0
  1346. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/tests/test_traitsdoc.py +0 -0
  1347. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/traitsdoc.py +0 -0
  1348. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/setup.py +0 -0
  1349. {numpy-1.9.3/numpy/core/code_generators → numpy-1.10.0.post2/numpy/_build_utils}/__init__.py +0 -0
  1350. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/compat/__init__.py +0 -0
  1351. {numpy-1.9.3/numpy/distutils/tests/f2py_ext → numpy-1.10.0.post2/numpy/core/code_generators}/__init__.py +0 -0
  1352. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/code_generators/genapi.py +0 -0
  1353. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/code_generators/generate_numpy_api.py +0 -0
  1354. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/cversions.py +0 -0
  1355. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/include/numpy/_neighborhood_iterator_imp.h +0 -0
  1356. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/include/numpy/_numpyconfig.h.in +0 -0
  1357. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/include/numpy/arrayobject.h +0 -0
  1358. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/include/numpy/arrayscalars.h +0 -0
  1359. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/include/numpy/halffloat.h +0 -0
  1360. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/include/numpy/noprefix.h +0 -0
  1361. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/include/numpy/npy_1_7_deprecated_api.h +0 -0
  1362. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/include/numpy/npy_interrupt.h +0 -0
  1363. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/include/numpy/npy_no_deprecated_api.h +0 -0
  1364. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/include/numpy/npy_os.h +0 -0
  1365. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/include/numpy/old_defines.h +0 -0
  1366. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/include/numpy/oldnumeric.h +0 -0
  1367. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/include/numpy/ufuncobject.h +0 -0
  1368. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/include/numpy/utils.h +0 -0
  1369. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/info.py +0 -0
  1370. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/mlib.ini.in +0 -0
  1371. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/npymath.ini.in +0 -0
  1372. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/dummymodule.c +0 -0
  1373. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/_datetime.h +0 -0
  1374. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/alloc.h +0 -0
  1375. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/array_assign.c +0 -0
  1376. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/array_assign.h +0 -0
  1377. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/array_assign_array.c +0 -0
  1378. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/array_assign_scalar.c +0 -0
  1379. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/arrayobject.h +0 -0
  1380. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/buffer.h +0 -0
  1381. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/calculation.h +0 -0
  1382. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/conversion_utils.h +0 -0
  1383. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/convert.h +0 -0
  1384. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/convert_datatype.h +0 -0
  1385. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/ctors.h +0 -0
  1386. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/datetime_busday.h +0 -0
  1387. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/datetime_busdaycal.h +0 -0
  1388. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/datetime_strings.h +0 -0
  1389. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/descriptor.h +0 -0
  1390. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/flagsobject.c +0 -0
  1391. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/getset.h +0 -0
  1392. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/hashdescr.h +0 -0
  1393. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/item_selection.h +0 -0
  1394. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/iterators.h +0 -0
  1395. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/methods.h +0 -0
  1396. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/nditer_impl.h +0 -0
  1397. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/nditer_pywrap.h +0 -0
  1398. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/nditer_templ.c.src +0 -0
  1399. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/numpymemoryview.h +0 -0
  1400. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/numpyos.h +0 -0
  1401. {numpy-1.9.3/numpy/core/blasdot → numpy-1.10.0.post2/numpy/core/src/multiarray}/python_xerbla.c +0 -0
  1402. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/refcount.c +0 -0
  1403. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/refcount.h +0 -0
  1404. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/sequence.c +0 -0
  1405. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/sequence.h +0 -0
  1406. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/shape.h +0 -0
  1407. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/ucsnarrow.h +0 -0
  1408. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/usertypes.c +0 -0
  1409. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/usertypes.h +0 -0
  1410. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/npymath/_signbit.c +0 -0
  1411. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/npymath/halffloat.c +0 -0
  1412. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/npymath/npy_math_common.h +0 -0
  1413. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/npysort/binsearch.c.src +0 -0
  1414. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/private/lowlevel_strided_loops.h +0 -0
  1415. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/private/npy_binsearch.h.src +0 -0
  1416. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/private/npy_fpmath.h +0 -0
  1417. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/private/npy_pycompat.h +0 -0
  1418. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/umath/reduction.c +0 -0
  1419. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/umath/reduction.h +0 -0
  1420. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/umath/struct_ufunc_test.c.src +0 -0
  1421. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/umath/ufunc_object.h +0 -0
  1422. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/umath/ufunc_type_resolution.h +0 -0
  1423. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/tests/data/astype_copy.pkl +0 -0
  1424. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/tests/data/recarray_from_file.fits +0 -0
  1425. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/tests/test_scalarprint.py +0 -0
  1426. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/ctypeslib.py +0 -0
  1427. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/__version__.py +0 -0
  1428. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/command/__init__.py +0 -0
  1429. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/command/bdist_rpm.py +0 -0
  1430. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/command/build_py.py +0 -0
  1431. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/command/build_scripts.py +0 -0
  1432. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/command/build_src.py +0 -0
  1433. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/command/config_compiler.py +0 -0
  1434. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/command/develop.py +0 -0
  1435. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/command/egg_info.py +0 -0
  1436. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/command/install.py +0 -0
  1437. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/command/install_clib.py +0 -0
  1438. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/command/install_data.py +0 -0
  1439. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/command/install_headers.py +0 -0
  1440. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/command/sdist.py +0 -0
  1441. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/compat.py +0 -0
  1442. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/conv_template.py +0 -0
  1443. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/core.py +0 -0
  1444. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/cpuinfo.py +0 -0
  1445. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/environment.py +0 -0
  1446. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/extension.py +0 -0
  1447. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/__init__.py +0 -0
  1448. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/absoft.py +0 -0
  1449. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/g95.py +0 -0
  1450. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/hpux.py +0 -0
  1451. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/ibm.py +0 -0
  1452. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/lahey.py +0 -0
  1453. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/mips.py +0 -0
  1454. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/nag.py +0 -0
  1455. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/none.py +0 -0
  1456. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/pathf95.py +0 -0
  1457. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/vast.py +0 -0
  1458. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/from_template.py +0 -0
  1459. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/info.py +0 -0
  1460. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/line_endings.py +0 -0
  1461. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/log.py +0 -0
  1462. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/mingw/gfortran_vs2003_hack.c +0 -0
  1463. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/numpy_distribution.py +0 -0
  1464. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/pathccompiler.py +0 -0
  1465. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/setup.py +0 -0
  1466. {numpy-1.9.3/numpy/distutils/tests/f2py_f90_ext → numpy-1.10.0.post2/numpy/distutils/tests/f2py_ext}/__init__.py +0 -0
  1467. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/tests/f2py_ext/setup.py +0 -0
  1468. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/tests/f2py_ext/src/fib1.f +0 -0
  1469. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/tests/f2py_ext/src/fib2.pyf +0 -0
  1470. {numpy-1.9.3/numpy/distutils/tests/gen_ext → numpy-1.10.0.post2/numpy/distutils/tests/f2py_f90_ext}/__init__.py +0 -0
  1471. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/tests/f2py_f90_ext/include/body.f90 +0 -0
  1472. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/tests/f2py_f90_ext/setup.py +0 -0
  1473. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/tests/f2py_f90_ext/src/foo_free.f90 +0 -0
  1474. {numpy-1.9.3/numpy/distutils/tests/pyrex_ext → numpy-1.10.0.post2/numpy/distutils/tests/gen_ext}/__init__.py +0 -0
  1475. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/tests/gen_ext/setup.py +0 -0
  1476. {numpy-1.9.3/numpy/distutils/tests/swig_ext → numpy-1.10.0.post2/numpy/distutils/tests/pyrex_ext}/__init__.py +0 -0
  1477. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/tests/pyrex_ext/primes.pyx +0 -0
  1478. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/tests/pyrex_ext/setup.py +0 -0
  1479. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/tests/setup.py +0 -0
  1480. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/tests/swig_ext/setup.py +0 -0
  1481. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/tests/swig_ext/src/example.c +0 -0
  1482. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/tests/swig_ext/src/example.i +0 -0
  1483. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/tests/swig_ext/src/zoo.cc +0 -0
  1484. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/tests/swig_ext/src/zoo.h +0 -0
  1485. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/tests/swig_ext/src/zoo.i +0 -0
  1486. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/tests/test_exec_command.py +0 -0
  1487. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/doc/__init__.py +0 -0
  1488. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/doc/basics.py +0 -0
  1489. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/doc/broadcasting.py +0 -0
  1490. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/doc/constants.py +0 -0
  1491. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/doc/howtofind.py +0 -0
  1492. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/doc/internals.py +0 -0
  1493. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/doc/io.py +0 -0
  1494. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/doc/jargon.py +0 -0
  1495. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/doc/methods_vs_functions.py +0 -0
  1496. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/doc/misc.py +0 -0
  1497. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/doc/performance.py +0 -0
  1498. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/doc/subclassing.py +0 -0
  1499. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/doc/ufuncs.py +0 -0
  1500. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/dual.py +0 -0
  1501. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/f2py/__version__.py +0 -0
  1502. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/f2py/info.py +0 -0
  1503. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/f2py/tests/src/assumed_shape/.f2py_f2cmap +0 -0
  1504. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/f2py/tests/src/assumed_shape/foo_free.f90 +0 -0
  1505. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/f2py/tests/src/assumed_shape/foo_mod.f90 +0 -0
  1506. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/f2py/tests/src/assumed_shape/foo_use.f90 +0 -0
  1507. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/f2py/tests/src/assumed_shape/precision.f90 +0 -0
  1508. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/f2py/tests/src/kind/foo.f90 +0 -0
  1509. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/f2py/tests/src/mixed/foo.f +0 -0
  1510. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/f2py/tests/src/mixed/foo_fixed.f90 +0 -0
  1511. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/f2py/tests/src/mixed/foo_free.f90 +0 -0
  1512. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/f2py/tests/src/regression/inout.f90 +0 -0
  1513. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/f2py/tests/src/size/foo.f90 +0 -0
  1514. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/fft/__init__.py +0 -0
  1515. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/fft/helper.py +0 -0
  1516. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/lib/__init__.py +0 -0
  1517. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/lib/_datasource.py +0 -0
  1518. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/lib/_version.py +0 -0
  1519. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/lib/scimath.py +0 -0
  1520. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/lib/tests/data/python3.npy +0 -0
  1521. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/lib/tests/data/win64python2.npy +0 -0
  1522. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/lib/tests/test__datasource.py +0 -0
  1523. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/lib/tests/test_arrayterator.py +0 -0
  1524. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/lib/tests/test_regression.py +0 -0
  1525. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/lib/tests/test_ufunclike.py +0 -0
  1526. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/lib/tests/test_utils.py +0 -0
  1527. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/lib/ufunclike.py +0 -0
  1528. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/lib/user_array.py +0 -0
  1529. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/linalg/__init__.py +0 -0
  1530. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/linalg/info.py +0 -0
  1531. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/linalg/lapack_lite/blas_lite.c +0 -0
  1532. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/linalg/lapack_lite/dlamch.c +0 -0
  1533. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/linalg/lapack_lite/dlapack_lite.c +0 -0
  1534. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/linalg/lapack_lite/f2c.h +0 -0
  1535. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/linalg/lapack_lite/f2c_lite.c +0 -0
  1536. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/linalg/lapack_lite/zlapack_lite.c +0 -0
  1537. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/linalg/setup.py +0 -0
  1538. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/linalg/tests/test_deprecations.py +0 -0
  1539. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/ma/version.py +0 -0
  1540. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/matrixlib/__init__.py +0 -0
  1541. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/matrixlib/setup.py +0 -0
  1542. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/polynomial/__init__.py +0 -0
  1543. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/polynomial/polynomial.py +0 -0
  1544. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/polynomial/setup.py +0 -0
  1545. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/polynomial/tests/test_chebyshev.py +0 -0
  1546. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/polynomial/tests/test_classes.py +0 -0
  1547. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/polynomial/tests/test_hermite.py +0 -0
  1548. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/polynomial/tests/test_hermite_e.py +0 -0
  1549. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/polynomial/tests/test_laguerre.py +0 -0
  1550. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/polynomial/tests/test_legendre.py +0 -0
  1551. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/polynomial/tests/test_polynomial.py +0 -0
  1552. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/polynomial/tests/test_polyutils.py +0 -0
  1553. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/polynomial/tests/test_printing.py +0 -0
  1554. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/random/__init__.py +0 -0
  1555. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/random/info.py +0 -0
  1556. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/random/mtrand/Python.pxi +0 -0
  1557. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/random/mtrand/distributions.h +0 -0
  1558. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/random/mtrand/generate_mtrand_c.py +0 -0
  1559. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/random/mtrand/initarray.c +0 -0
  1560. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/random/mtrand/initarray.h +0 -0
  1561. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/random/mtrand/mtrand_py_helper.h +0 -0
  1562. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/random/mtrand/numpy.pxd +0 -0
  1563. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/random/mtrand/randomkit.c +0 -0
  1564. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/random/mtrand/randomkit.h +0 -0
  1565. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/testing/tests/test_doctesting.py +0 -0
  1566. {numpy-1.9.3 → numpy-1.10.0.post2}/setupegg.py +0 -0
  1567. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/Makefile +0 -0
  1568. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/pyfragments.swg +0 -0
  1569. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/Array1.cxx +0 -0
  1570. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/Array1.h +0 -0
  1571. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/Array2.cxx +0 -0
  1572. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/Array2.h +0 -0
  1573. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/Farray.cxx +0 -0
  1574. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/Farray.h +0 -0
  1575. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/Farray.i +0 -0
  1576. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/Fortran.cxx +0 -0
  1577. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/Fortran.h +0 -0
  1578. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/Fortran.i +0 -0
  1579. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/Matrix.cxx +0 -0
  1580. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/Matrix.h +0 -0
  1581. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/Matrix.i +0 -0
  1582. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/SuperTensor.cxx +0 -0
  1583. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/SuperTensor.h +0 -0
  1584. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/SuperTensor.i +0 -0
  1585. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/Tensor.cxx +0 -0
  1586. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/Tensor.h +0 -0
  1587. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/Tensor.i +0 -0
  1588. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/Vector.cxx +0 -0
  1589. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/Vector.h +0 -0
  1590. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/Vector.i +0 -0
@@ -1,3013 +0,0 @@
1
- /*
2
- * This file contains the implementation of the 'einsum' function,
3
- * which provides an einstein-summation operation.
4
- *
5
- * Copyright (c) 2011 by Mark Wiebe (mwwiebe@gmail.com)
6
- * The Univerity of British Columbia
7
- *
8
- * See LICENSE.txt for the license.
9
- */
10
-
11
- #define PY_SSIZE_T_CLEAN
12
- #include "Python.h"
13
- #include "structmember.h"
14
-
15
- #define NPY_NO_DEPRECATED_API NPY_API_VERSION
16
- #define _MULTIARRAYMODULE
17
- #include <numpy/npy_common.h>
18
- #include <numpy/arrayobject.h>
19
- #include <numpy/halffloat.h>
20
- #include <npy_pycompat.h>
21
-
22
- #include <ctype.h>
23
-
24
- #include "convert.h"
25
- #include "common.h"
26
-
27
- #ifdef NPY_HAVE_SSE_INTRINSICS
28
- #define EINSUM_USE_SSE1 1
29
- #else
30
- #define EINSUM_USE_SSE1 0
31
- #endif
32
-
33
- /*
34
- * TODO: Only some SSE2 for float64 is implemented.
35
- */
36
- #ifdef NPY_HAVE_SSE2_INTRINSICS
37
- #define EINSUM_USE_SSE2 1
38
- #else
39
- #define EINSUM_USE_SSE2 0
40
- #endif
41
-
42
- #if EINSUM_USE_SSE1
43
- #include <xmmintrin.h>
44
- #endif
45
-
46
- #if EINSUM_USE_SSE2
47
- #include <emmintrin.h>
48
- #endif
49
-
50
- #define EINSUM_IS_SSE_ALIGNED(x) ((((npy_intp)x)&0xf) == 0)
51
-
52
- /********** PRINTF DEBUG TRACING **************/
53
- #define NPY_EINSUM_DBG_TRACING 0
54
-
55
- #if NPY_EINSUM_DBG_TRACING
56
- #define NPY_EINSUM_DBG_PRINT(s) printf("%s", s);
57
- #define NPY_EINSUM_DBG_PRINT1(s, p1) printf(s, p1);
58
- #define NPY_EINSUM_DBG_PRINT2(s, p1, p2) printf(s, p1, p2);
59
- #define NPY_EINSUM_DBG_PRINT3(s, p1, p2, p3) printf(s);
60
- #else
61
- #define NPY_EINSUM_DBG_PRINT(s)
62
- #define NPY_EINSUM_DBG_PRINT1(s, p1)
63
- #define NPY_EINSUM_DBG_PRINT2(s, p1, p2)
64
- #define NPY_EINSUM_DBG_PRINT3(s, p1, p2, p3)
65
- #endif
66
- /**********************************************/
67
-
68
- /**begin repeat
69
- * #name = byte, short, int, long, longlong,
70
- * ubyte, ushort, uint, ulong, ulonglong,
71
- * half, float, double, longdouble,
72
- * cfloat, cdouble, clongdouble#
73
- * #type = npy_byte, npy_short, npy_int, npy_long, npy_longlong,
74
- * npy_ubyte, npy_ushort, npy_uint, npy_ulong, npy_ulonglong,
75
- * npy_half, npy_float, npy_double, npy_longdouble,
76
- * npy_cfloat, npy_cdouble, npy_clongdouble#
77
- * #temptype = npy_byte, npy_short, npy_int, npy_long, npy_longlong,
78
- * npy_ubyte, npy_ushort, npy_uint, npy_ulong, npy_ulonglong,
79
- * npy_float, npy_float, npy_double, npy_longdouble,
80
- * npy_float, npy_double, npy_longdouble#
81
- * #to = ,,,,,
82
- * ,,,,,
83
- * npy_float_to_half,,,,
84
- * ,,#
85
- * #from = ,,,,,
86
- * ,,,,,
87
- * npy_half_to_float,,,,
88
- * ,,#
89
- * #complex = 0*5,
90
- * 0*5,
91
- * 0*4,
92
- * 1*3#
93
- * #float32 = 0*5,
94
- * 0*5,
95
- * 0,1,0,0,
96
- * 0*3#
97
- * #float64 = 0*5,
98
- * 0*5,
99
- * 0,0,1,0,
100
- * 0*3#
101
- */
102
-
103
- /**begin repeat1
104
- * #nop = 1, 2, 3, 1000#
105
- * #noplabel = one, two, three, any#
106
- */
107
- static void
108
- @name@_sum_of_products_@noplabel@(int nop, char **dataptr,
109
- npy_intp *strides, npy_intp count)
110
- {
111
- #if (@nop@ == 1) || (@nop@ <= 3 && !@complex@)
112
- char *data0 = dataptr[0];
113
- npy_intp stride0 = strides[0];
114
- #endif
115
- #if (@nop@ == 2 || @nop@ == 3) && !@complex@
116
- char *data1 = dataptr[1];
117
- npy_intp stride1 = strides[1];
118
- #endif
119
- #if (@nop@ == 3) && !@complex@
120
- char *data2 = dataptr[2];
121
- npy_intp stride2 = strides[2];
122
- #endif
123
- #if (@nop@ == 1) || (@nop@ <= 3 && !@complex@)
124
- char *data_out = dataptr[@nop@];
125
- npy_intp stride_out = strides[@nop@];
126
- #endif
127
-
128
- NPY_EINSUM_DBG_PRINT1("@name@_sum_of_products_@noplabel@ (%d)\n", (int)count);
129
-
130
- while (count--) {
131
- #if !@complex@
132
- # if @nop@ == 1
133
- *(@type@ *)data_out = @to@(@from@(*(@type@ *)data0) +
134
- @from@(*(@type@ *)data_out));
135
- data0 += stride0;
136
- data_out += stride_out;
137
- # elif @nop@ == 2
138
- *(@type@ *)data_out = @to@(@from@(*(@type@ *)data0) *
139
- @from@(*(@type@ *)data1) +
140
- @from@(*(@type@ *)data_out));
141
- data0 += stride0;
142
- data1 += stride1;
143
- data_out += stride_out;
144
- # elif @nop@ == 3
145
- *(@type@ *)data_out = @to@(@from@(*(@type@ *)data0) *
146
- @from@(*(@type@ *)data1) *
147
- @from@(*(@type@ *)data2) +
148
- @from@(*(@type@ *)data_out));
149
- data0 += stride0;
150
- data1 += stride1;
151
- data2 += stride2;
152
- data_out += stride_out;
153
- # else
154
- @temptype@ temp = @from@(*(@type@ *)dataptr[0]);
155
- int i;
156
- for (i = 1; i < nop; ++i) {
157
- temp *= @from@(*(@type@ *)dataptr[i]);
158
- }
159
- *(@type@ *)dataptr[nop] = @to@(temp +
160
- @from@(*(@type@ *)dataptr[i]));
161
- for (i = 0; i <= nop; ++i) {
162
- dataptr[i] += strides[i];
163
- }
164
- # endif
165
- #else /* complex */
166
- # if @nop@ == 1
167
- ((@temptype@ *)data_out)[0] = ((@temptype@ *)data0)[0] +
168
- ((@temptype@ *)data_out)[0];
169
- ((@temptype@ *)data_out)[1] = ((@temptype@ *)data0)[1] +
170
- ((@temptype@ *)data_out)[1];
171
- data0 += stride0;
172
- data_out += stride_out;
173
- # else
174
- # if @nop@ <= 3
175
- #define _SUMPROD_NOP @nop@
176
- # else
177
- #define _SUMPROD_NOP nop
178
- # endif
179
- @temptype@ re, im, tmp;
180
- int i;
181
- re = ((@temptype@ *)dataptr[0])[0];
182
- im = ((@temptype@ *)dataptr[0])[1];
183
- for (i = 1; i < _SUMPROD_NOP; ++i) {
184
- tmp = re * ((@temptype@ *)dataptr[i])[0] -
185
- im * ((@temptype@ *)dataptr[i])[1];
186
- im = re * ((@temptype@ *)dataptr[i])[1] +
187
- im * ((@temptype@ *)dataptr[i])[0];
188
- re = tmp;
189
- }
190
- ((@temptype@ *)dataptr[_SUMPROD_NOP])[0] = re +
191
- ((@temptype@ *)dataptr[_SUMPROD_NOP])[0];
192
- ((@temptype@ *)dataptr[_SUMPROD_NOP])[1] = im +
193
- ((@temptype@ *)dataptr[_SUMPROD_NOP])[1];
194
-
195
- for (i = 0; i <= _SUMPROD_NOP; ++i) {
196
- dataptr[i] += strides[i];
197
- }
198
- #undef _SUMPROD_NOP
199
- # endif
200
- #endif
201
- }
202
- }
203
-
204
- #if @nop@ == 1
205
-
206
- static void
207
- @name@_sum_of_products_contig_one(int nop, char **dataptr,
208
- npy_intp *NPY_UNUSED(strides), npy_intp count)
209
- {
210
- @type@ *data0 = (@type@ *)dataptr[0];
211
- @type@ *data_out = (@type@ *)dataptr[1];
212
-
213
- NPY_EINSUM_DBG_PRINT1("@name@_sum_of_products_contig_one (%d)\n",
214
- (int)count);
215
-
216
- /* This is placed before the main loop to make small counts faster */
217
- finish_after_unrolled_loop:
218
- switch (count) {
219
- /**begin repeat2
220
- * #i = 6, 5, 4, 3, 2, 1, 0#
221
- */
222
- case @i@+1:
223
- #if !@complex@
224
- data_out[@i@] = @to@(@from@(data0[@i@]) +
225
- @from@(data_out[@i@]));
226
- #else
227
- ((@temptype@ *)data_out + 2*@i@)[0] =
228
- ((@temptype@ *)data0 + 2*@i@)[0] +
229
- ((@temptype@ *)data_out + 2*@i@)[0];
230
- ((@temptype@ *)data_out + 2*@i@)[1] =
231
- ((@temptype@ *)data0 + 2*@i@)[1] +
232
- ((@temptype@ *)data_out + 2*@i@)[1];
233
- #endif
234
- /**end repeat2**/
235
- case 0:
236
- return;
237
- }
238
-
239
- /* Unroll the loop by 8 */
240
- while (count >= 8) {
241
- count -= 8;
242
-
243
- /**begin repeat2
244
- * #i = 0, 1, 2, 3, 4, 5, 6, 7#
245
- */
246
- #if !@complex@
247
- data_out[@i@] = @to@(@from@(data0[@i@]) +
248
- @from@(data_out[@i@]));
249
- #else /* complex */
250
- ((@temptype@ *)data_out + 2*@i@)[0] =
251
- ((@temptype@ *)data0 + 2*@i@)[0] +
252
- ((@temptype@ *)data_out + 2*@i@)[0];
253
- ((@temptype@ *)data_out + 2*@i@)[1] =
254
- ((@temptype@ *)data0 + 2*@i@)[1] +
255
- ((@temptype@ *)data_out + 2*@i@)[1];
256
- #endif
257
- /**end repeat2**/
258
- data0 += 8;
259
- data_out += 8;
260
- }
261
-
262
- /* Finish off the loop */
263
- goto finish_after_unrolled_loop;
264
- }
265
-
266
- #elif @nop@ == 2 && !@complex@
267
-
268
- static void
269
- @name@_sum_of_products_contig_two(int nop, char **dataptr,
270
- npy_intp *NPY_UNUSED(strides), npy_intp count)
271
- {
272
- @type@ *data0 = (@type@ *)dataptr[0];
273
- @type@ *data1 = (@type@ *)dataptr[1];
274
- @type@ *data_out = (@type@ *)dataptr[2];
275
-
276
- #if EINSUM_USE_SSE1 && @float32@
277
- __m128 a, b;
278
- #endif
279
-
280
- NPY_EINSUM_DBG_PRINT1("@name@_sum_of_products_contig_two (%d)\n",
281
- (int)count);
282
-
283
- /* This is placed before the main loop to make small counts faster */
284
- finish_after_unrolled_loop:
285
- switch (count) {
286
- /**begin repeat2
287
- * #i = 6, 5, 4, 3, 2, 1, 0#
288
- */
289
- case @i@+1:
290
- data_out[@i@] = @to@(@from@(data0[@i@]) *
291
- @from@(data1[@i@]) +
292
- @from@(data_out[@i@]));
293
- /**end repeat2**/
294
- case 0:
295
- return;
296
- }
297
-
298
- #if EINSUM_USE_SSE1 && @float32@
299
- /* Use aligned instructions if possible */
300
- if (EINSUM_IS_SSE_ALIGNED(data0) && EINSUM_IS_SSE_ALIGNED(data1) &&
301
- EINSUM_IS_SSE_ALIGNED(data_out)) {
302
- /* Unroll the loop by 8 */
303
- while (count >= 8) {
304
- count -= 8;
305
-
306
- /**begin repeat2
307
- * #i = 0, 4#
308
- */
309
- a = _mm_mul_ps(_mm_load_ps(data0+@i@), _mm_load_ps(data1+@i@));
310
- b = _mm_add_ps(a, _mm_load_ps(data_out+@i@));
311
- _mm_store_ps(data_out+@i@, b);
312
- /**end repeat2**/
313
- data0 += 8;
314
- data1 += 8;
315
- data_out += 8;
316
- }
317
-
318
- /* Finish off the loop */
319
- goto finish_after_unrolled_loop;
320
- }
321
- #endif
322
-
323
- /* Unroll the loop by 8 */
324
- while (count >= 8) {
325
- count -= 8;
326
-
327
- #if EINSUM_USE_SSE1 && @float32@
328
- /**begin repeat2
329
- * #i = 0, 4#
330
- */
331
- a = _mm_mul_ps(_mm_loadu_ps(data0+@i@), _mm_loadu_ps(data1+@i@));
332
- b = _mm_add_ps(a, _mm_loadu_ps(data_out+@i@));
333
- _mm_storeu_ps(data_out+@i@, b);
334
- /**end repeat2**/
335
- #else
336
- /**begin repeat2
337
- * #i = 0, 1, 2, 3, 4, 5, 6, 7#
338
- */
339
- data_out[@i@] = @to@(@from@(data0[@i@]) *
340
- @from@(data1[@i@]) +
341
- @from@(data_out[@i@]));
342
- /**end repeat2**/
343
- #endif
344
- data0 += 8;
345
- data1 += 8;
346
- data_out += 8;
347
- }
348
-
349
- /* Finish off the loop */
350
- goto finish_after_unrolled_loop;
351
- }
352
-
353
- /* Some extra specializations for the two operand case */
354
- static void
355
- @name@_sum_of_products_stride0_contig_outcontig_two(int nop, char **dataptr,
356
- npy_intp *NPY_UNUSED(strides), npy_intp count)
357
- {
358
- @temptype@ value0 = @from@(*(@type@ *)dataptr[0]);
359
- @type@ *data1 = (@type@ *)dataptr[1];
360
- @type@ *data_out = (@type@ *)dataptr[2];
361
-
362
- #if EINSUM_USE_SSE1 && @float32@
363
- __m128 a, b, value0_sse;
364
- #elif EINSUM_USE_SSE2 && @float64@
365
- __m128d a, b, value0_sse;
366
- #endif
367
-
368
- NPY_EINSUM_DBG_PRINT1("@name@_sum_of_products_stride0_contig_outcontig_two (%d)\n",
369
- (int)count);
370
-
371
- /* This is placed before the main loop to make small counts faster */
372
- finish_after_unrolled_loop:
373
- switch (count) {
374
- /**begin repeat2
375
- * #i = 6, 5, 4, 3, 2, 1, 0#
376
- */
377
- case @i@+1:
378
- data_out[@i@] = @to@(value0 *
379
- @from@(data1[@i@]) +
380
- @from@(data_out[@i@]));
381
- /**end repeat2**/
382
- case 0:
383
- return;
384
- }
385
-
386
- #if EINSUM_USE_SSE1 && @float32@
387
- value0_sse = _mm_set_ps1(value0);
388
-
389
- /* Use aligned instructions if possible */
390
- if (EINSUM_IS_SSE_ALIGNED(data1) && EINSUM_IS_SSE_ALIGNED(data_out)) {
391
- /* Unroll the loop by 8 */
392
- while (count >= 8) {
393
- count -= 8;
394
-
395
- /**begin repeat2
396
- * #i = 0, 4#
397
- */
398
- a = _mm_mul_ps(value0_sse, _mm_load_ps(data1+@i@));
399
- b = _mm_add_ps(a, _mm_load_ps(data_out+@i@));
400
- _mm_store_ps(data_out+@i@, b);
401
- /**end repeat2**/
402
- data1 += 8;
403
- data_out += 8;
404
- }
405
-
406
- /* Finish off the loop */
407
- if (count > 0) {
408
- goto finish_after_unrolled_loop;
409
- }
410
- else {
411
- return;
412
- }
413
- }
414
- #elif EINSUM_USE_SSE2 && @float64@
415
- value0_sse = _mm_set1_pd(value0);
416
-
417
- /* Use aligned instructions if possible */
418
- if (EINSUM_IS_SSE_ALIGNED(data1) && EINSUM_IS_SSE_ALIGNED(data_out)) {
419
- /* Unroll the loop by 8 */
420
- while (count >= 8) {
421
- count -= 8;
422
-
423
- /**begin repeat2
424
- * #i = 0, 2, 4, 6#
425
- */
426
- a = _mm_mul_pd(value0_sse, _mm_load_pd(data1+@i@));
427
- b = _mm_add_pd(a, _mm_load_pd(data_out+@i@));
428
- _mm_store_pd(data_out+@i@, b);
429
- /**end repeat2**/
430
- data1 += 8;
431
- data_out += 8;
432
- }
433
-
434
- /* Finish off the loop */
435
- if (count > 0) {
436
- goto finish_after_unrolled_loop;
437
- }
438
- else {
439
- return;
440
- }
441
- }
442
- #endif
443
-
444
- /* Unroll the loop by 8 */
445
- while (count >= 8) {
446
- count -= 8;
447
-
448
- #if EINSUM_USE_SSE1 && @float32@
449
- /**begin repeat2
450
- * #i = 0, 4#
451
- */
452
- a = _mm_mul_ps(value0_sse, _mm_loadu_ps(data1+@i@));
453
- b = _mm_add_ps(a, _mm_loadu_ps(data_out+@i@));
454
- _mm_storeu_ps(data_out+@i@, b);
455
- /**end repeat2**/
456
- #elif EINSUM_USE_SSE2 && @float64@
457
- /**begin repeat2
458
- * #i = 0, 2, 4, 6#
459
- */
460
- a = _mm_mul_pd(value0_sse, _mm_loadu_pd(data1+@i@));
461
- b = _mm_add_pd(a, _mm_loadu_pd(data_out+@i@));
462
- _mm_storeu_pd(data_out+@i@, b);
463
- /**end repeat2**/
464
- #else
465
- /**begin repeat2
466
- * #i = 0, 1, 2, 3, 4, 5, 6, 7#
467
- */
468
- data_out[@i@] = @to@(value0 *
469
- @from@(data1[@i@]) +
470
- @from@(data_out[@i@]));
471
- /**end repeat2**/
472
- #endif
473
- data1 += 8;
474
- data_out += 8;
475
- }
476
-
477
- /* Finish off the loop */
478
- if (count > 0) {
479
- goto finish_after_unrolled_loop;
480
- }
481
- }
482
-
483
- static void
484
- @name@_sum_of_products_contig_stride0_outcontig_two(int nop, char **dataptr,
485
- npy_intp *NPY_UNUSED(strides), npy_intp count)
486
- {
487
- @type@ *data0 = (@type@ *)dataptr[0];
488
- @temptype@ value1 = @from@(*(@type@ *)dataptr[1]);
489
- @type@ *data_out = (@type@ *)dataptr[2];
490
-
491
- #if EINSUM_USE_SSE1 && @float32@
492
- __m128 a, b, value1_sse;
493
- #endif
494
-
495
- NPY_EINSUM_DBG_PRINT1("@name@_sum_of_products_contig_stride0_outcontig_two (%d)\n",
496
- (int)count);
497
-
498
- /* This is placed before the main loop to make small counts faster */
499
- finish_after_unrolled_loop:
500
- switch (count) {
501
- /**begin repeat2
502
- * #i = 6, 5, 4, 3, 2, 1, 0#
503
- */
504
- case @i@+1:
505
- data_out[@i@] = @to@(@from@(data0[@i@])*
506
- value1 +
507
- @from@(data_out[@i@]));
508
- /**end repeat2**/
509
- case 0:
510
- return;
511
- }
512
-
513
- #if EINSUM_USE_SSE1 && @float32@
514
- value1_sse = _mm_set_ps1(value1);
515
-
516
- /* Use aligned instructions if possible */
517
- if (EINSUM_IS_SSE_ALIGNED(data0) && EINSUM_IS_SSE_ALIGNED(data_out)) {
518
- /* Unroll the loop by 8 */
519
- while (count >= 8) {
520
- count -= 8;
521
-
522
- /**begin repeat2
523
- * #i = 0, 4#
524
- */
525
- a = _mm_mul_ps(_mm_load_ps(data0+@i@), value1_sse);
526
- b = _mm_add_ps(a, _mm_load_ps(data_out+@i@));
527
- _mm_store_ps(data_out+@i@, b);
528
- /**end repeat2**/
529
- data0 += 8;
530
- data_out += 8;
531
- }
532
-
533
- /* Finish off the loop */
534
- goto finish_after_unrolled_loop;
535
- }
536
- #endif
537
-
538
- /* Unroll the loop by 8 */
539
- while (count >= 8) {
540
- count -= 8;
541
-
542
- #if EINSUM_USE_SSE1 && @float32@
543
- /**begin repeat2
544
- * #i = 0, 4#
545
- */
546
- a = _mm_mul_ps(_mm_loadu_ps(data0+@i@), value1_sse);
547
- b = _mm_add_ps(a, _mm_loadu_ps(data_out+@i@));
548
- _mm_storeu_ps(data_out+@i@, b);
549
- /**end repeat2**/
550
- #else
551
- /**begin repeat2
552
- * #i = 0, 1, 2, 3, 4, 5, 6, 7#
553
- */
554
- data_out[@i@] = @to@(@from@(data0[@i@])*
555
- value1 +
556
- @from@(data_out[@i@]));
557
- /**end repeat2**/
558
- #endif
559
- data0 += 8;
560
- data_out += 8;
561
- }
562
-
563
- /* Finish off the loop */
564
- goto finish_after_unrolled_loop;
565
- }
566
-
567
- static void
568
- @name@_sum_of_products_contig_contig_outstride0_two(int nop, char **dataptr,
569
- npy_intp *NPY_UNUSED(strides), npy_intp count)
570
- {
571
- @type@ *data0 = (@type@ *)dataptr[0];
572
- @type@ *data1 = (@type@ *)dataptr[1];
573
- @temptype@ accum = 0;
574
-
575
- #if EINSUM_USE_SSE1 && @float32@
576
- __m128 a, accum_sse = _mm_setzero_ps();
577
- #elif EINSUM_USE_SSE2 && @float64@
578
- __m128d a, accum_sse = _mm_setzero_pd();
579
- #endif
580
-
581
- NPY_EINSUM_DBG_PRINT1("@name@_sum_of_products_contig_contig_outstride0_two (%d)\n",
582
- (int)count);
583
-
584
- /* This is placed before the main loop to make small counts faster */
585
- finish_after_unrolled_loop:
586
- switch (count) {
587
- /**begin repeat2
588
- * #i = 6, 5, 4, 3, 2, 1, 0#
589
- */
590
- case @i@+1:
591
- accum += @from@(data0[@i@]) * @from@(data1[@i@]);
592
- /**end repeat2**/
593
- case 0:
594
- *(@type@ *)dataptr[2] += @to@(accum);
595
- return;
596
- }
597
-
598
- #if EINSUM_USE_SSE1 && @float32@
599
- /* Use aligned instructions if possible */
600
- if (EINSUM_IS_SSE_ALIGNED(data0) && EINSUM_IS_SSE_ALIGNED(data1)) {
601
- /* Unroll the loop by 8 */
602
- while (count >= 8) {
603
- count -= 8;
604
-
605
- _mm_prefetch(data0 + 512, _MM_HINT_T0);
606
- _mm_prefetch(data1 + 512, _MM_HINT_T0);
607
-
608
- /**begin repeat2
609
- * #i = 0, 4#
610
- */
611
- /*
612
- * NOTE: This accumulation changes the order, so will likely
613
- * produce slightly different results.
614
- */
615
- a = _mm_mul_ps(_mm_load_ps(data0+@i@), _mm_load_ps(data1+@i@));
616
- accum_sse = _mm_add_ps(accum_sse, a);
617
- /**end repeat2**/
618
- data0 += 8;
619
- data1 += 8;
620
- }
621
-
622
- /* Add the four SSE values and put in accum */
623
- a = _mm_shuffle_ps(accum_sse, accum_sse, _MM_SHUFFLE(2,3,0,1));
624
- accum_sse = _mm_add_ps(a, accum_sse);
625
- a = _mm_shuffle_ps(accum_sse, accum_sse, _MM_SHUFFLE(1,0,3,2));
626
- accum_sse = _mm_add_ps(a, accum_sse);
627
- _mm_store_ss(&accum, accum_sse);
628
-
629
- /* Finish off the loop */
630
- goto finish_after_unrolled_loop;
631
- }
632
- #elif EINSUM_USE_SSE2 && @float64@
633
- /* Use aligned instructions if possible */
634
- if (EINSUM_IS_SSE_ALIGNED(data0) && EINSUM_IS_SSE_ALIGNED(data1)) {
635
- /* Unroll the loop by 8 */
636
- while (count >= 8) {
637
- count -= 8;
638
-
639
- _mm_prefetch(data0 + 512, _MM_HINT_T0);
640
- _mm_prefetch(data1 + 512, _MM_HINT_T0);
641
-
642
- /**begin repeat2
643
- * #i = 0, 2, 4, 6#
644
- */
645
- /*
646
- * NOTE: This accumulation changes the order, so will likely
647
- * produce slightly different results.
648
- */
649
- a = _mm_mul_pd(_mm_load_pd(data0+@i@), _mm_load_pd(data1+@i@));
650
- accum_sse = _mm_add_pd(accum_sse, a);
651
- /**end repeat2**/
652
- data0 += 8;
653
- data1 += 8;
654
- }
655
-
656
- /* Add the two SSE2 values and put in accum */
657
- a = _mm_shuffle_pd(accum_sse, accum_sse, _MM_SHUFFLE2(0,1));
658
- accum_sse = _mm_add_pd(a, accum_sse);
659
- _mm_store_sd(&accum, accum_sse);
660
-
661
- /* Finish off the loop */
662
- goto finish_after_unrolled_loop;
663
- }
664
- #endif
665
-
666
- /* Unroll the loop by 8 */
667
- while (count >= 8) {
668
- count -= 8;
669
-
670
- #if EINSUM_USE_SSE1 && @float32@
671
- _mm_prefetch(data0 + 512, _MM_HINT_T0);
672
- _mm_prefetch(data1 + 512, _MM_HINT_T0);
673
-
674
- /**begin repeat2
675
- * #i = 0, 4#
676
- */
677
- /*
678
- * NOTE: This accumulation changes the order, so will likely
679
- * produce slightly different results.
680
- */
681
- a = _mm_mul_ps(_mm_loadu_ps(data0+@i@), _mm_loadu_ps(data1+@i@));
682
- accum_sse = _mm_add_ps(accum_sse, a);
683
- /**end repeat2**/
684
- #elif EINSUM_USE_SSE2 && @float64@
685
- _mm_prefetch(data0 + 512, _MM_HINT_T0);
686
- _mm_prefetch(data1 + 512, _MM_HINT_T0);
687
-
688
- /**begin repeat2
689
- * #i = 0, 2, 4, 6#
690
- */
691
- /*
692
- * NOTE: This accumulation changes the order, so will likely
693
- * produce slightly different results.
694
- */
695
- a = _mm_mul_pd(_mm_loadu_pd(data0+@i@), _mm_loadu_pd(data1+@i@));
696
- accum_sse = _mm_add_pd(accum_sse, a);
697
- /**end repeat2**/
698
- #else
699
- /**begin repeat2
700
- * #i = 0, 1, 2, 3, 4, 5, 6, 7#
701
- */
702
- accum += @from@(data0[@i@]) * @from@(data1[@i@]);
703
- /**end repeat2**/
704
- #endif
705
- data0 += 8;
706
- data1 += 8;
707
- }
708
-
709
- #if EINSUM_USE_SSE1 && @float32@
710
- /* Add the four SSE values and put in accum */
711
- a = _mm_shuffle_ps(accum_sse, accum_sse, _MM_SHUFFLE(2,3,0,1));
712
- accum_sse = _mm_add_ps(a, accum_sse);
713
- a = _mm_shuffle_ps(accum_sse, accum_sse, _MM_SHUFFLE(1,0,3,2));
714
- accum_sse = _mm_add_ps(a, accum_sse);
715
- _mm_store_ss(&accum, accum_sse);
716
- #elif EINSUM_USE_SSE2 && @float64@
717
- /* Add the two SSE2 values and put in accum */
718
- a = _mm_shuffle_pd(accum_sse, accum_sse, _MM_SHUFFLE2(0,1));
719
- accum_sse = _mm_add_pd(a, accum_sse);
720
- _mm_store_sd(&accum, accum_sse);
721
- #endif
722
-
723
- /* Finish off the loop */
724
- goto finish_after_unrolled_loop;
725
- }
726
-
727
- static void
728
- @name@_sum_of_products_stride0_contig_outstride0_two(int nop, char **dataptr,
729
- npy_intp *NPY_UNUSED(strides), npy_intp count)
730
- {
731
- @temptype@ value0 = @from@(*(@type@ *)dataptr[0]);
732
- @type@ *data1 = (@type@ *)dataptr[1];
733
- @temptype@ accum = 0;
734
-
735
- #if EINSUM_USE_SSE1 && @float32@
736
- __m128 a, accum_sse = _mm_setzero_ps();
737
- #endif
738
-
739
- NPY_EINSUM_DBG_PRINT1("@name@_sum_of_products_stride0_contig_outstride0_two (%d)\n",
740
- (int)count);
741
-
742
- /* This is placed before the main loop to make small counts faster */
743
- finish_after_unrolled_loop:
744
- switch (count) {
745
- /**begin repeat2
746
- * #i = 6, 5, 4, 3, 2, 1, 0#
747
- */
748
- case @i@+1:
749
- accum += @from@(data1[@i@]);
750
- /**end repeat2**/
751
- case 0:
752
- *(@type@ *)dataptr[2] += @to@(value0 * accum);
753
- return;
754
- }
755
-
756
- #if EINSUM_USE_SSE1 && @float32@
757
- /* Use aligned instructions if possible */
758
- if (EINSUM_IS_SSE_ALIGNED(data1)) {
759
- /* Unroll the loop by 8 */
760
- while (count >= 8) {
761
- count -= 8;
762
-
763
- /**begin repeat2
764
- * #i = 0, 4#
765
- */
766
- /*
767
- * NOTE: This accumulation changes the order, so will likely
768
- * produce slightly different results.
769
- */
770
- accum_sse = _mm_add_ps(accum_sse, _mm_load_ps(data1+@i@));
771
- /**end repeat2**/
772
- data1 += 8;
773
- }
774
-
775
- #if EINSUM_USE_SSE1 && @float32@
776
- /* Add the four SSE values and put in accum */
777
- a = _mm_shuffle_ps(accum_sse, accum_sse, _MM_SHUFFLE(2,3,0,1));
778
- accum_sse = _mm_add_ps(a, accum_sse);
779
- a = _mm_shuffle_ps(accum_sse, accum_sse, _MM_SHUFFLE(1,0,3,2));
780
- accum_sse = _mm_add_ps(a, accum_sse);
781
- _mm_store_ss(&accum, accum_sse);
782
- #endif
783
-
784
- /* Finish off the loop */
785
- goto finish_after_unrolled_loop;
786
- }
787
- #endif
788
-
789
- /* Unroll the loop by 8 */
790
- while (count >= 8) {
791
- count -= 8;
792
-
793
- #if EINSUM_USE_SSE1 && @float32@
794
- /**begin repeat2
795
- * #i = 0, 4#
796
- */
797
- /*
798
- * NOTE: This accumulation changes the order, so will likely
799
- * produce slightly different results.
800
- */
801
- accum_sse = _mm_add_ps(accum_sse, _mm_loadu_ps(data1+@i@));
802
- /**end repeat2**/
803
- #else
804
- /**begin repeat2
805
- * #i = 0, 1, 2, 3, 4, 5, 6, 7#
806
- */
807
- accum += @from@(data1[@i@]);
808
- /**end repeat2**/
809
- #endif
810
- data1 += 8;
811
- }
812
-
813
- #if EINSUM_USE_SSE1 && @float32@
814
- /* Add the four SSE values and put in accum */
815
- a = _mm_shuffle_ps(accum_sse, accum_sse, _MM_SHUFFLE(2,3,0,1));
816
- accum_sse = _mm_add_ps(a, accum_sse);
817
- a = _mm_shuffle_ps(accum_sse, accum_sse, _MM_SHUFFLE(1,0,3,2));
818
- accum_sse = _mm_add_ps(a, accum_sse);
819
- _mm_store_ss(&accum, accum_sse);
820
- #endif
821
-
822
- /* Finish off the loop */
823
- goto finish_after_unrolled_loop;
824
- }
825
-
826
- static void
827
- @name@_sum_of_products_contig_stride0_outstride0_two(int nop, char **dataptr,
828
- npy_intp *NPY_UNUSED(strides), npy_intp count)
829
- {
830
- @type@ *data0 = (@type@ *)dataptr[0];
831
- @temptype@ value1 = @from@(*(@type@ *)dataptr[1]);
832
- @temptype@ accum = 0;
833
-
834
- #if EINSUM_USE_SSE1 && @float32@
835
- __m128 a, accum_sse = _mm_setzero_ps();
836
- #endif
837
-
838
- NPY_EINSUM_DBG_PRINT1("@name@_sum_of_products_contig_stride0_outstride0_two (%d)\n",
839
- (int)count);
840
-
841
- /* This is placed before the main loop to make small counts faster */
842
- finish_after_unrolled_loop:
843
- switch (count) {
844
- /**begin repeat2
845
- * #i = 6, 5, 4, 3, 2, 1, 0#
846
- */
847
- case @i@+1:
848
- accum += @from@(data0[@i@]);
849
- /**end repeat2**/
850
- case 0:
851
- *(@type@ *)dataptr[2] += @to@(accum * value1);
852
- return;
853
- }
854
-
855
- #if EINSUM_USE_SSE1 && @float32@
856
- /* Use aligned instructions if possible */
857
- if (EINSUM_IS_SSE_ALIGNED(data0)) {
858
- /* Unroll the loop by 8 */
859
- while (count >= 8) {
860
- count -= 8;
861
-
862
- /**begin repeat2
863
- * #i = 0, 4#
864
- */
865
- /*
866
- * NOTE: This accumulation changes the order, so will likely
867
- * produce slightly different results.
868
- */
869
- accum_sse = _mm_add_ps(accum_sse, _mm_load_ps(data0+@i@));
870
- /**end repeat2**/
871
- data0 += 8;
872
- }
873
-
874
- #if EINSUM_USE_SSE1 && @float32@
875
- /* Add the four SSE values and put in accum */
876
- a = _mm_shuffle_ps(accum_sse, accum_sse, _MM_SHUFFLE(2,3,0,1));
877
- accum_sse = _mm_add_ps(a, accum_sse);
878
- a = _mm_shuffle_ps(accum_sse, accum_sse, _MM_SHUFFLE(1,0,3,2));
879
- accum_sse = _mm_add_ps(a, accum_sse);
880
- _mm_store_ss(&accum, accum_sse);
881
- #endif
882
-
883
- /* Finish off the loop */
884
- goto finish_after_unrolled_loop;
885
- }
886
- #endif
887
-
888
- /* Unroll the loop by 8 */
889
- while (count >= 8) {
890
- count -= 8;
891
-
892
- #if EINSUM_USE_SSE1 && @float32@
893
- /**begin repeat2
894
- * #i = 0, 4#
895
- */
896
- /*
897
- * NOTE: This accumulation changes the order, so will likely
898
- * produce slightly different results.
899
- */
900
- accum_sse = _mm_add_ps(accum_sse, _mm_loadu_ps(data0+@i@));
901
- /**end repeat2**/
902
- #else
903
- /**begin repeat2
904
- * #i = 0, 1, 2, 3, 4, 5, 6, 7#
905
- */
906
- accum += @from@(data0[@i@]);
907
- /**end repeat2**/
908
- #endif
909
- data0 += 8;
910
- }
911
-
912
- #if EINSUM_USE_SSE1 && @float32@
913
- /* Add the four SSE values and put in accum */
914
- a = _mm_shuffle_ps(accum_sse, accum_sse, _MM_SHUFFLE(2,3,0,1));
915
- accum_sse = _mm_add_ps(a, accum_sse);
916
- a = _mm_shuffle_ps(accum_sse, accum_sse, _MM_SHUFFLE(1,0,3,2));
917
- accum_sse = _mm_add_ps(a, accum_sse);
918
- _mm_store_ss(&accum, accum_sse);
919
- #endif
920
-
921
- /* Finish off the loop */
922
- goto finish_after_unrolled_loop;
923
- }
924
-
925
- #elif @nop@ == 3 && !@complex@
926
-
927
- static void
928
- @name@_sum_of_products_contig_three(int nop, char **dataptr,
929
- npy_intp *NPY_UNUSED(strides), npy_intp count)
930
- {
931
- @type@ *data0 = (@type@ *)dataptr[0];
932
- @type@ *data1 = (@type@ *)dataptr[1];
933
- @type@ *data2 = (@type@ *)dataptr[2];
934
- @type@ *data_out = (@type@ *)dataptr[3];
935
-
936
- /* Unroll the loop by 8 */
937
- while (count >= 8) {
938
- count -= 8;
939
-
940
- /**begin repeat2
941
- * #i = 0, 1, 2, 3, 4, 5, 6, 7#
942
- */
943
- data_out[@i@] = @to@(@from@(data0[@i@]) *
944
- @from@(data1[@i@]) *
945
- @from@(data2[@i@]) +
946
- @from@(data_out[@i@]));
947
- /**end repeat2**/
948
- data0 += 8;
949
- data1 += 8;
950
- data2 += 8;
951
- data_out += 8;
952
- }
953
-
954
- /* Finish off the loop */
955
-
956
- /**begin repeat2
957
- * #i = 0, 1, 2, 3, 4, 5, 6, 7#
958
- */
959
- if (count-- == 0) {
960
- return;
961
- }
962
- data_out[@i@] = @to@(@from@(data0[@i@]) *
963
- @from@(data1[@i@]) *
964
- @from@(data2[@i@]) +
965
- @from@(data_out[@i@]));
966
- /**end repeat2**/
967
- }
968
-
969
- #else /* @nop@ > 3 || @complex */
970
-
971
- static void
972
- @name@_sum_of_products_contig_@noplabel@(int nop, char **dataptr,
973
- npy_intp *NPY_UNUSED(strides), npy_intp count)
974
- {
975
- NPY_EINSUM_DBG_PRINT1("@name@_sum_of_products_contig_@noplabel@ (%d)\n",
976
- (int)count);
977
-
978
- while (count--) {
979
- #if !@complex@
980
- @temptype@ temp = @from@(*(@type@ *)dataptr[0]);
981
- int i;
982
- for (i = 1; i < nop; ++i) {
983
- temp *= @from@(*(@type@ *)dataptr[i]);
984
- }
985
- *(@type@ *)dataptr[nop] = @to@(temp +
986
- @from@(*(@type@ *)dataptr[i]));
987
- for (i = 0; i <= nop; ++i) {
988
- dataptr[i] += sizeof(@type@);
989
- }
990
- #else /* complex */
991
- # if @nop@ <= 3
992
- # define _SUMPROD_NOP @nop@
993
- # else
994
- # define _SUMPROD_NOP nop
995
- # endif
996
- @temptype@ re, im, tmp;
997
- int i;
998
- re = ((@temptype@ *)dataptr[0])[0];
999
- im = ((@temptype@ *)dataptr[0])[1];
1000
- for (i = 1; i < _SUMPROD_NOP; ++i) {
1001
- tmp = re * ((@temptype@ *)dataptr[i])[0] -
1002
- im * ((@temptype@ *)dataptr[i])[1];
1003
- im = re * ((@temptype@ *)dataptr[i])[1] +
1004
- im * ((@temptype@ *)dataptr[i])[0];
1005
- re = tmp;
1006
- }
1007
- ((@temptype@ *)dataptr[_SUMPROD_NOP])[0] = re +
1008
- ((@temptype@ *)dataptr[_SUMPROD_NOP])[0];
1009
- ((@temptype@ *)dataptr[_SUMPROD_NOP])[1] = im +
1010
- ((@temptype@ *)dataptr[_SUMPROD_NOP])[1];
1011
-
1012
- for (i = 0; i <= _SUMPROD_NOP; ++i) {
1013
- dataptr[i] += sizeof(@type@);
1014
- }
1015
- # undef _SUMPROD_NOP
1016
- #endif
1017
- }
1018
- }
1019
-
1020
- #endif /* functions for various @nop@ */
1021
-
1022
- #if @nop@ == 1
1023
-
1024
- static void
1025
- @name@_sum_of_products_contig_outstride0_one(int nop, char **dataptr,
1026
- npy_intp *strides, npy_intp count)
1027
- {
1028
- #if @complex@
1029
- @temptype@ accum_re = 0, accum_im = 0;
1030
- @temptype@ *data0 = (@temptype@ *)dataptr[0];
1031
- #else
1032
- @temptype@ accum = 0;
1033
- @type@ *data0 = (@type@ *)dataptr[0];
1034
- #endif
1035
-
1036
- #if EINSUM_USE_SSE1 && @float32@
1037
- __m128 a, accum_sse = _mm_setzero_ps();
1038
- #elif EINSUM_USE_SSE2 && @float64@
1039
- __m128d a, accum_sse = _mm_setzero_pd();
1040
- #endif
1041
-
1042
-
1043
- NPY_EINSUM_DBG_PRINT1("@name@_sum_of_products_contig_outstride0_one (%d)\n",
1044
- (int)count);
1045
-
1046
- /* This is placed before the main loop to make small counts faster */
1047
- finish_after_unrolled_loop:
1048
- switch (count) {
1049
- /**begin repeat2
1050
- * #i = 6, 5, 4, 3, 2, 1, 0#
1051
- */
1052
- case @i@+1:
1053
- #if !@complex@
1054
- accum += @from@(data0[@i@]);
1055
- #else /* complex */
1056
- accum_re += data0[2*@i@+0];
1057
- accum_im += data0[2*@i@+1];
1058
- #endif
1059
- /**end repeat2**/
1060
- case 0:
1061
- #if @complex@
1062
- ((@temptype@ *)dataptr[1])[0] += accum_re;
1063
- ((@temptype@ *)dataptr[1])[1] += accum_im;
1064
- #else
1065
- *((@type@ *)dataptr[1]) = @to@(accum +
1066
- @from@(*((@type@ *)dataptr[1])));
1067
- #endif
1068
- return;
1069
- }
1070
-
1071
- #if EINSUM_USE_SSE1 && @float32@
1072
- /* Use aligned instructions if possible */
1073
- if (EINSUM_IS_SSE_ALIGNED(data0)) {
1074
- /* Unroll the loop by 8 */
1075
- while (count >= 8) {
1076
- count -= 8;
1077
-
1078
- _mm_prefetch(data0 + 512, _MM_HINT_T0);
1079
-
1080
- /**begin repeat2
1081
- * #i = 0, 4#
1082
- */
1083
- /*
1084
- * NOTE: This accumulation changes the order, so will likely
1085
- * produce slightly different results.
1086
- */
1087
- accum_sse = _mm_add_ps(accum_sse, _mm_load_ps(data0+@i@));
1088
- /**end repeat2**/
1089
- data0 += 8;
1090
- }
1091
-
1092
- /* Add the four SSE values and put in accum */
1093
- a = _mm_shuffle_ps(accum_sse, accum_sse, _MM_SHUFFLE(2,3,0,1));
1094
- accum_sse = _mm_add_ps(a, accum_sse);
1095
- a = _mm_shuffle_ps(accum_sse, accum_sse, _MM_SHUFFLE(1,0,3,2));
1096
- accum_sse = _mm_add_ps(a, accum_sse);
1097
- _mm_store_ss(&accum, accum_sse);
1098
-
1099
- /* Finish off the loop */
1100
- goto finish_after_unrolled_loop;
1101
- }
1102
- #elif EINSUM_USE_SSE2 && @float64@
1103
- /* Use aligned instructions if possible */
1104
- if (EINSUM_IS_SSE_ALIGNED(data0)) {
1105
- /* Unroll the loop by 8 */
1106
- while (count >= 8) {
1107
- count -= 8;
1108
-
1109
- _mm_prefetch(data0 + 512, _MM_HINT_T0);
1110
-
1111
- /**begin repeat2
1112
- * #i = 0, 2, 4, 6#
1113
- */
1114
- /*
1115
- * NOTE: This accumulation changes the order, so will likely
1116
- * produce slightly different results.
1117
- */
1118
- accum_sse = _mm_add_pd(accum_sse, _mm_load_pd(data0+@i@));
1119
- /**end repeat2**/
1120
- data0 += 8;
1121
- }
1122
-
1123
- /* Add the two SSE2 values and put in accum */
1124
- a = _mm_shuffle_pd(accum_sse, accum_sse, _MM_SHUFFLE2(0,1));
1125
- accum_sse = _mm_add_pd(a, accum_sse);
1126
- _mm_store_sd(&accum, accum_sse);
1127
-
1128
- /* Finish off the loop */
1129
- goto finish_after_unrolled_loop;
1130
- }
1131
- #endif
1132
-
1133
- /* Unroll the loop by 8 */
1134
- while (count >= 8) {
1135
- count -= 8;
1136
-
1137
- #if EINSUM_USE_SSE1 && @float32@
1138
- _mm_prefetch(data0 + 512, _MM_HINT_T0);
1139
-
1140
- /**begin repeat2
1141
- * #i = 0, 4#
1142
- */
1143
- /*
1144
- * NOTE: This accumulation changes the order, so will likely
1145
- * produce slightly different results.
1146
- */
1147
- accum_sse = _mm_add_ps(accum_sse, _mm_loadu_ps(data0+@i@));
1148
- /**end repeat2**/
1149
- #elif EINSUM_USE_SSE2 && @float64@
1150
- _mm_prefetch(data0 + 512, _MM_HINT_T0);
1151
-
1152
- /**begin repeat2
1153
- * #i = 0, 2, 4, 6#
1154
- */
1155
- /*
1156
- * NOTE: This accumulation changes the order, so will likely
1157
- * produce slightly different results.
1158
- */
1159
- accum_sse = _mm_add_pd(accum_sse, _mm_loadu_pd(data0+@i@));
1160
- /**end repeat2**/
1161
- #else
1162
- /**begin repeat2
1163
- * #i = 0, 1, 2, 3, 4, 5, 6, 7#
1164
- */
1165
- # if !@complex@
1166
- accum += @from@(data0[@i@]);
1167
- # else /* complex */
1168
- accum_re += data0[2*@i@+0];
1169
- accum_im += data0[2*@i@+1];
1170
- # endif
1171
- /**end repeat2**/
1172
- #endif
1173
-
1174
- #if !@complex@
1175
- data0 += 8;
1176
- #else
1177
- data0 += 8*2;
1178
- #endif
1179
- }
1180
-
1181
- #if EINSUM_USE_SSE1 && @float32@
1182
- /* Add the four SSE values and put in accum */
1183
- a = _mm_shuffle_ps(accum_sse, accum_sse, _MM_SHUFFLE(2,3,0,1));
1184
- accum_sse = _mm_add_ps(a, accum_sse);
1185
- a = _mm_shuffle_ps(accum_sse, accum_sse, _MM_SHUFFLE(1,0,3,2));
1186
- accum_sse = _mm_add_ps(a, accum_sse);
1187
- _mm_store_ss(&accum, accum_sse);
1188
- #elif EINSUM_USE_SSE2 && @float64@
1189
- /* Add the two SSE2 values and put in accum */
1190
- a = _mm_shuffle_pd(accum_sse, accum_sse, _MM_SHUFFLE2(0,1));
1191
- accum_sse = _mm_add_pd(a, accum_sse);
1192
- _mm_store_sd(&accum, accum_sse);
1193
- #endif
1194
-
1195
- /* Finish off the loop */
1196
- goto finish_after_unrolled_loop;
1197
- }
1198
-
1199
- #endif /* @nop@ == 1 */
1200
-
1201
- static void
1202
- @name@_sum_of_products_outstride0_@noplabel@(int nop, char **dataptr,
1203
- npy_intp *strides, npy_intp count)
1204
- {
1205
- #if @complex@
1206
- @temptype@ accum_re = 0, accum_im = 0;
1207
- #else
1208
- @temptype@ accum = 0;
1209
- #endif
1210
-
1211
- #if (@nop@ == 1) || (@nop@ <= 3 && !@complex@)
1212
- char *data0 = dataptr[0];
1213
- npy_intp stride0 = strides[0];
1214
- #endif
1215
- #if (@nop@ == 2 || @nop@ == 3) && !@complex@
1216
- char *data1 = dataptr[1];
1217
- npy_intp stride1 = strides[1];
1218
- #endif
1219
- #if (@nop@ == 3) && !@complex@
1220
- char *data2 = dataptr[2];
1221
- npy_intp stride2 = strides[2];
1222
- #endif
1223
-
1224
- NPY_EINSUM_DBG_PRINT1("@name@_sum_of_products_outstride0_@noplabel@ (%d)\n",
1225
- (int)count);
1226
-
1227
- while (count--) {
1228
- #if !@complex@
1229
- # if @nop@ == 1
1230
- accum += @from@(*(@type@ *)data0);
1231
- data0 += stride0;
1232
- # elif @nop@ == 2
1233
- accum += @from@(*(@type@ *)data0) *
1234
- @from@(*(@type@ *)data1);
1235
- data0 += stride0;
1236
- data1 += stride1;
1237
- # elif @nop@ == 3
1238
- accum += @from@(*(@type@ *)data0) *
1239
- @from@(*(@type@ *)data1) *
1240
- @from@(*(@type@ *)data2);
1241
- data0 += stride0;
1242
- data1 += stride1;
1243
- data2 += stride2;
1244
- # else
1245
- @temptype@ temp = @from@(*(@type@ *)dataptr[0]);
1246
- int i;
1247
- for (i = 1; i < nop; ++i) {
1248
- temp *= @from@(*(@type@ *)dataptr[i]);
1249
- }
1250
- accum += temp;
1251
- for (i = 0; i < nop; ++i) {
1252
- dataptr[i] += strides[i];
1253
- }
1254
- # endif
1255
- #else /* complex */
1256
- # if @nop@ == 1
1257
- accum_re += ((@temptype@ *)data0)[0];
1258
- accum_im += ((@temptype@ *)data0)[1];
1259
- data0 += stride0;
1260
- # else
1261
- # if @nop@ <= 3
1262
- #define _SUMPROD_NOP @nop@
1263
- # else
1264
- #define _SUMPROD_NOP nop
1265
- # endif
1266
- @temptype@ re, im, tmp;
1267
- int i;
1268
- re = ((@temptype@ *)dataptr[0])[0];
1269
- im = ((@temptype@ *)dataptr[0])[1];
1270
- for (i = 1; i < _SUMPROD_NOP; ++i) {
1271
- tmp = re * ((@temptype@ *)dataptr[i])[0] -
1272
- im * ((@temptype@ *)dataptr[i])[1];
1273
- im = re * ((@temptype@ *)dataptr[i])[1] +
1274
- im * ((@temptype@ *)dataptr[i])[0];
1275
- re = tmp;
1276
- }
1277
- accum_re += re;
1278
- accum_im += im;
1279
- for (i = 0; i < _SUMPROD_NOP; ++i) {
1280
- dataptr[i] += strides[i];
1281
- }
1282
- #undef _SUMPROD_NOP
1283
- # endif
1284
- #endif
1285
- }
1286
-
1287
- #if @complex@
1288
- # if @nop@ <= 3
1289
- ((@temptype@ *)dataptr[@nop@])[0] += accum_re;
1290
- ((@temptype@ *)dataptr[@nop@])[1] += accum_im;
1291
- # else
1292
- ((@temptype@ *)dataptr[nop])[0] += accum_re;
1293
- ((@temptype@ *)dataptr[nop])[1] += accum_im;
1294
- # endif
1295
- #else
1296
- # if @nop@ <= 3
1297
- *((@type@ *)dataptr[@nop@]) = @to@(accum +
1298
- @from@(*((@type@ *)dataptr[@nop@])));
1299
- # else
1300
- *((@type@ *)dataptr[nop]) = @to@(accum +
1301
- @from@(*((@type@ *)dataptr[nop])));
1302
- # endif
1303
- #endif
1304
-
1305
- }
1306
-
1307
- /**end repeat1**/
1308
-
1309
- /**end repeat**/
1310
-
1311
-
1312
- /* Do OR of ANDs for the boolean type */
1313
-
1314
- /**begin repeat
1315
- * #nop = 1, 2, 3, 1000#
1316
- * #noplabel = one, two, three, any#
1317
- */
1318
-
1319
- static void
1320
- bool_sum_of_products_@noplabel@(int nop, char **dataptr,
1321
- npy_intp *strides, npy_intp count)
1322
- {
1323
- #if (@nop@ <= 3)
1324
- char *data0 = dataptr[0];
1325
- npy_intp stride0 = strides[0];
1326
- #endif
1327
- #if (@nop@ == 2 || @nop@ == 3)
1328
- char *data1 = dataptr[1];
1329
- npy_intp stride1 = strides[1];
1330
- #endif
1331
- #if (@nop@ == 3)
1332
- char *data2 = dataptr[2];
1333
- npy_intp stride2 = strides[2];
1334
- #endif
1335
- #if (@nop@ <= 3)
1336
- char *data_out = dataptr[@nop@];
1337
- npy_intp stride_out = strides[@nop@];
1338
- #endif
1339
-
1340
- while (count--) {
1341
- #if @nop@ == 1
1342
- *(npy_bool *)data_out = *(npy_bool *)data0 ||
1343
- *(npy_bool *)data_out;
1344
- data0 += stride0;
1345
- data_out += stride_out;
1346
- #elif @nop@ == 2
1347
- *(npy_bool *)data_out = (*(npy_bool *)data0 &&
1348
- *(npy_bool *)data1) ||
1349
- *(npy_bool *)data_out;
1350
- data0 += stride0;
1351
- data1 += stride1;
1352
- data_out += stride_out;
1353
- #elif @nop@ == 3
1354
- *(npy_bool *)data_out = (*(npy_bool *)data0 &&
1355
- *(npy_bool *)data1 &&
1356
- *(npy_bool *)data2) ||
1357
- *(npy_bool *)data_out;
1358
- data0 += stride0;
1359
- data1 += stride1;
1360
- data2 += stride2;
1361
- data_out += stride_out;
1362
- #else
1363
- npy_bool temp = *(npy_bool *)dataptr[0];
1364
- int i;
1365
- for (i = 1; i < nop; ++i) {
1366
- temp = temp && *(npy_bool *)dataptr[i];
1367
- }
1368
- *(npy_bool *)dataptr[nop] = temp || *(npy_bool *)dataptr[i];
1369
- for (i = 0; i <= nop; ++i) {
1370
- dataptr[i] += strides[i];
1371
- }
1372
- #endif
1373
- }
1374
- }
1375
-
1376
- static void
1377
- bool_sum_of_products_contig_@noplabel@(int nop, char **dataptr,
1378
- npy_intp *strides, npy_intp count)
1379
- {
1380
- #if (@nop@ <= 3)
1381
- char *data0 = dataptr[0];
1382
- #endif
1383
- #if (@nop@ == 2 || @nop@ == 3)
1384
- char *data1 = dataptr[1];
1385
- #endif
1386
- #if (@nop@ == 3)
1387
- char *data2 = dataptr[2];
1388
- #endif
1389
- #if (@nop@ <= 3)
1390
- char *data_out = dataptr[@nop@];
1391
- #endif
1392
-
1393
- #if (@nop@ <= 3)
1394
- /* This is placed before the main loop to make small counts faster */
1395
- finish_after_unrolled_loop:
1396
- switch (count) {
1397
- /**begin repeat1
1398
- * #i = 6, 5, 4, 3, 2, 1, 0#
1399
- */
1400
- case @i@+1:
1401
- # if @nop@ == 1
1402
- *((npy_bool *)data_out + @i@) = (*((npy_bool *)data0 + @i@)) ||
1403
- (*((npy_bool *)data_out + @i@));
1404
- data0 += 8*sizeof(npy_bool);
1405
- data_out += 8*sizeof(npy_bool);
1406
- # elif @nop@ == 2
1407
- *((npy_bool *)data_out + @i@) =
1408
- ((*((npy_bool *)data0 + @i@)) &&
1409
- (*((npy_bool *)data1 + @i@))) ||
1410
- (*((npy_bool *)data_out + @i@));
1411
- data0 += 8*sizeof(npy_bool);
1412
- data1 += 8*sizeof(npy_bool);
1413
- data_out += 8*sizeof(npy_bool);
1414
- # elif @nop@ == 3
1415
- *((npy_bool *)data_out + @i@) =
1416
- ((*((npy_bool *)data0 + @i@)) &&
1417
- (*((npy_bool *)data1 + @i@)) &&
1418
- (*((npy_bool *)data2 + @i@))) ||
1419
- (*((npy_bool *)data_out + @i@));
1420
- data0 += 8*sizeof(npy_bool);
1421
- data1 += 8*sizeof(npy_bool);
1422
- data2 += 8*sizeof(npy_bool);
1423
- data_out += 8*sizeof(npy_bool);
1424
- # endif
1425
- /**end repeat1**/
1426
- case 0:
1427
- return;
1428
- }
1429
- #endif
1430
-
1431
- /* Unroll the loop by 8 for fixed-size nop */
1432
- #if (@nop@ <= 3)
1433
- while (count >= 8) {
1434
- count -= 8;
1435
- #else
1436
- while (count--) {
1437
- #endif
1438
-
1439
- # if @nop@ == 1
1440
- /**begin repeat1
1441
- * #i = 0, 1, 2, 3, 4, 5, 6, 7#
1442
- */
1443
- *((npy_bool *)data_out + @i@) = (*((npy_bool *)data0 + @i@)) ||
1444
- (*((npy_bool *)data_out + @i@));
1445
- /**end repeat1**/
1446
- data0 += 8*sizeof(npy_bool);
1447
- data_out += 8*sizeof(npy_bool);
1448
- # elif @nop@ == 2
1449
- /**begin repeat1
1450
- * #i = 0, 1, 2, 3, 4, 5, 6, 7#
1451
- */
1452
- *((npy_bool *)data_out + @i@) =
1453
- ((*((npy_bool *)data0 + @i@)) &&
1454
- (*((npy_bool *)data1 + @i@))) ||
1455
- (*((npy_bool *)data_out + @i@));
1456
- /**end repeat1**/
1457
- data0 += 8*sizeof(npy_bool);
1458
- data1 += 8*sizeof(npy_bool);
1459
- data_out += 8*sizeof(npy_bool);
1460
- # elif @nop@ == 3
1461
- /**begin repeat1
1462
- * #i = 0, 1, 2, 3, 4, 5, 6, 7#
1463
- */
1464
- *((npy_bool *)data_out + @i@) =
1465
- ((*((npy_bool *)data0 + @i@)) &&
1466
- (*((npy_bool *)data1 + @i@)) &&
1467
- (*((npy_bool *)data2 + @i@))) ||
1468
- (*((npy_bool *)data_out + @i@));
1469
- /**end repeat1**/
1470
- data0 += 8*sizeof(npy_bool);
1471
- data1 += 8*sizeof(npy_bool);
1472
- data2 += 8*sizeof(npy_bool);
1473
- data_out += 8*sizeof(npy_bool);
1474
- # else
1475
- npy_bool temp = *(npy_bool *)dataptr[0];
1476
- int i;
1477
- for (i = 1; i < nop; ++i) {
1478
- temp = temp && *(npy_bool *)dataptr[i];
1479
- }
1480
- *(npy_bool *)dataptr[nop] = temp || *(npy_bool *)dataptr[i];
1481
- for (i = 0; i <= nop; ++i) {
1482
- dataptr[i] += sizeof(npy_bool);
1483
- }
1484
- # endif
1485
- }
1486
-
1487
- /* If the loop was unrolled, we need to finish it off */
1488
- #if (@nop@ <= 3)
1489
- goto finish_after_unrolled_loop;
1490
- #endif
1491
- }
1492
-
1493
- static void
1494
- bool_sum_of_products_outstride0_@noplabel@(int nop, char **dataptr,
1495
- npy_intp *strides, npy_intp count)
1496
- {
1497
- npy_bool accum = 0;
1498
-
1499
- #if (@nop@ <= 3)
1500
- char *data0 = dataptr[0];
1501
- npy_intp stride0 = strides[0];
1502
- #endif
1503
- #if (@nop@ == 2 || @nop@ == 3)
1504
- char *data1 = dataptr[1];
1505
- npy_intp stride1 = strides[1];
1506
- #endif
1507
- #if (@nop@ == 3)
1508
- char *data2 = dataptr[2];
1509
- npy_intp stride2 = strides[2];
1510
- #endif
1511
-
1512
- while (count--) {
1513
- #if @nop@ == 1
1514
- accum = *(npy_bool *)data0 || accum;
1515
- data0 += stride0;
1516
- #elif @nop@ == 2
1517
- accum = (*(npy_bool *)data0 && *(npy_bool *)data1) || accum;
1518
- data0 += stride0;
1519
- data1 += stride1;
1520
- #elif @nop@ == 3
1521
- accum = (*(npy_bool *)data0 &&
1522
- *(npy_bool *)data1 &&
1523
- *(npy_bool *)data2) || accum;
1524
- data0 += stride0;
1525
- data1 += stride1;
1526
- data2 += stride2;
1527
- #else
1528
- npy_bool temp = *(npy_bool *)dataptr[0];
1529
- int i;
1530
- for (i = 1; i < nop; ++i) {
1531
- temp = temp && *(npy_bool *)dataptr[i];
1532
- }
1533
- accum = temp || accum;
1534
- for (i = 0; i <= nop; ++i) {
1535
- dataptr[i] += strides[i];
1536
- }
1537
- #endif
1538
- }
1539
-
1540
- # if @nop@ <= 3
1541
- *((npy_bool *)dataptr[@nop@]) = accum || *((npy_bool *)dataptr[@nop@]);
1542
- # else
1543
- *((npy_bool *)dataptr[nop]) = accum || *((npy_bool *)dataptr[nop]);
1544
- # endif
1545
- }
1546
-
1547
- /**end repeat**/
1548
-
1549
- typedef void (*sum_of_products_fn)(int, char **, npy_intp *, npy_intp);
1550
-
1551
- /* These tables need to match up with the type enum */
1552
- static sum_of_products_fn
1553
- _contig_outstride0_unary_specialization_table[NPY_NTYPES] = {
1554
- /**begin repeat
1555
- * #name = bool,
1556
- * byte, ubyte,
1557
- * short, ushort,
1558
- * int, uint,
1559
- * long, ulong,
1560
- * longlong, ulonglong,
1561
- * float, double, longdouble,
1562
- * cfloat, cdouble, clongdouble,
1563
- * object, string, unicode, void,
1564
- * datetime, timedelta, half#
1565
- * #use = 0,
1566
- * 1, 1,
1567
- * 1, 1,
1568
- * 1, 1,
1569
- * 1, 1,
1570
- * 1, 1,
1571
- * 1, 1, 1,
1572
- * 1, 1, 1,
1573
- * 0, 0, 0, 0,
1574
- * 0, 0, 1#
1575
- */
1576
- #if @use@
1577
- &@name@_sum_of_products_contig_outstride0_one,
1578
- #else
1579
- NULL,
1580
- #endif
1581
- /**end repeat**/
1582
- }; /* End of _contig_outstride0_unary_specialization_table */
1583
-
1584
- static sum_of_products_fn _binary_specialization_table[NPY_NTYPES][5] = {
1585
- /**begin repeat
1586
- * #name = bool,
1587
- * byte, ubyte,
1588
- * short, ushort,
1589
- * int, uint,
1590
- * long, ulong,
1591
- * longlong, ulonglong,
1592
- * float, double, longdouble,
1593
- * cfloat, cdouble, clongdouble,
1594
- * object, string, unicode, void,
1595
- * datetime, timedelta, half#
1596
- * #use = 0,
1597
- * 1, 1,
1598
- * 1, 1,
1599
- * 1, 1,
1600
- * 1, 1,
1601
- * 1, 1,
1602
- * 1, 1, 1,
1603
- * 0, 0, 0,
1604
- * 0, 0, 0, 0,
1605
- * 0, 0, 1#
1606
- */
1607
- #if @use@
1608
- {
1609
- &@name@_sum_of_products_stride0_contig_outstride0_two,
1610
- &@name@_sum_of_products_stride0_contig_outcontig_two,
1611
- &@name@_sum_of_products_contig_stride0_outstride0_two,
1612
- &@name@_sum_of_products_contig_stride0_outcontig_two,
1613
- &@name@_sum_of_products_contig_contig_outstride0_two,
1614
- },
1615
- #else
1616
- {NULL, NULL, NULL, NULL, NULL},
1617
- #endif
1618
- /**end repeat**/
1619
- }; /* End of _binary_specialization_table */
1620
-
1621
- static sum_of_products_fn _outstride0_specialized_table[NPY_NTYPES][4] = {
1622
- /**begin repeat
1623
- * #name = bool,
1624
- * byte, ubyte,
1625
- * short, ushort,
1626
- * int, uint,
1627
- * long, ulong,
1628
- * longlong, ulonglong,
1629
- * float, double, longdouble,
1630
- * cfloat, cdouble, clongdouble,
1631
- * object, string, unicode, void,
1632
- * datetime, timedelta, half#
1633
- * #use = 1,
1634
- * 1, 1,
1635
- * 1, 1,
1636
- * 1, 1,
1637
- * 1, 1,
1638
- * 1, 1,
1639
- * 1, 1, 1,
1640
- * 1, 1, 1,
1641
- * 0, 0, 0, 0,
1642
- * 0, 0, 1#
1643
- */
1644
- #if @use@
1645
- {
1646
- &@name@_sum_of_products_outstride0_any,
1647
- &@name@_sum_of_products_outstride0_one,
1648
- &@name@_sum_of_products_outstride0_two,
1649
- &@name@_sum_of_products_outstride0_three
1650
- },
1651
- #else
1652
- {NULL, NULL, NULL, NULL},
1653
- #endif
1654
- /**end repeat**/
1655
- }; /* End of _outstride0_specialized_table */
1656
-
1657
- static sum_of_products_fn _allcontig_specialized_table[NPY_NTYPES][4] = {
1658
- /**begin repeat
1659
- * #name = bool,
1660
- * byte, ubyte,
1661
- * short, ushort,
1662
- * int, uint,
1663
- * long, ulong,
1664
- * longlong, ulonglong,
1665
- * float, double, longdouble,
1666
- * cfloat, cdouble, clongdouble,
1667
- * object, string, unicode, void,
1668
- * datetime, timedelta, half#
1669
- * #use = 1,
1670
- * 1, 1,
1671
- * 1, 1,
1672
- * 1, 1,
1673
- * 1, 1,
1674
- * 1, 1,
1675
- * 1, 1, 1,
1676
- * 1, 1, 1,
1677
- * 0, 0, 0, 0,
1678
- * 0, 0, 1#
1679
- */
1680
- #if @use@
1681
- {
1682
- &@name@_sum_of_products_contig_any,
1683
- &@name@_sum_of_products_contig_one,
1684
- &@name@_sum_of_products_contig_two,
1685
- &@name@_sum_of_products_contig_three
1686
- },
1687
- #else
1688
- {NULL, NULL, NULL, NULL},
1689
- #endif
1690
- /**end repeat**/
1691
- }; /* End of _allcontig_specialized_table */
1692
-
1693
- static sum_of_products_fn _unspecialized_table[NPY_NTYPES][4] = {
1694
- /**begin repeat
1695
- * #name = bool,
1696
- * byte, ubyte,
1697
- * short, ushort,
1698
- * int, uint,
1699
- * long, ulong,
1700
- * longlong, ulonglong,
1701
- * float, double, longdouble,
1702
- * cfloat, cdouble, clongdouble,
1703
- * object, string, unicode, void,
1704
- * datetime, timedelta, half#
1705
- * #use = 1,
1706
- * 1, 1,
1707
- * 1, 1,
1708
- * 1, 1,
1709
- * 1, 1,
1710
- * 1, 1,
1711
- * 1, 1, 1,
1712
- * 1, 1, 1,
1713
- * 0, 0, 0, 0,
1714
- * 0, 0, 1#
1715
- */
1716
- #if @use@
1717
- {
1718
- &@name@_sum_of_products_any,
1719
- &@name@_sum_of_products_one,
1720
- &@name@_sum_of_products_two,
1721
- &@name@_sum_of_products_three
1722
- },
1723
- #else
1724
- {NULL, NULL, NULL, NULL},
1725
- #endif
1726
- /**end repeat**/
1727
- }; /* End of _unnspecialized_table */
1728
-
1729
- static sum_of_products_fn
1730
- get_sum_of_products_function(int nop, int type_num,
1731
- npy_intp itemsize, npy_intp *fixed_strides)
1732
- {
1733
- int iop;
1734
-
1735
- if (type_num >= NPY_NTYPES) {
1736
- return NULL;
1737
- }
1738
-
1739
- /* contiguous reduction */
1740
- if (nop == 1 && fixed_strides[0] == itemsize && fixed_strides[1] == 0) {
1741
- sum_of_products_fn ret =
1742
- _contig_outstride0_unary_specialization_table[type_num];
1743
- if (ret != NULL) {
1744
- return ret;
1745
- }
1746
- }
1747
-
1748
- /* nop of 2 has more specializations */
1749
- if (nop == 2) {
1750
- /* Encode the zero/contiguous strides */
1751
- int code;
1752
- code = (fixed_strides[0] == 0) ? 0 :
1753
- (fixed_strides[0] == itemsize) ? 2*2*1 : 8;
1754
- code += (fixed_strides[1] == 0) ? 0 :
1755
- (fixed_strides[1] == itemsize) ? 2*1 : 8;
1756
- code += (fixed_strides[2] == 0) ? 0 :
1757
- (fixed_strides[2] == itemsize) ? 1 : 8;
1758
- if (code >= 2 && code < 7) {
1759
- sum_of_products_fn ret =
1760
- _binary_specialization_table[type_num][code-2];
1761
- if (ret != NULL) {
1762
- return ret;
1763
- }
1764
- }
1765
- }
1766
-
1767
- /* Inner loop with an output stride of 0 */
1768
- if (fixed_strides[nop] == 0) {
1769
- return _outstride0_specialized_table[type_num][nop <= 3 ? nop : 0];
1770
- }
1771
-
1772
- /* Check for all contiguous */
1773
- for (iop = 0; iop < nop; ++iop) {
1774
- if (fixed_strides[iop] != itemsize) {
1775
- break;
1776
- }
1777
- }
1778
-
1779
- /* Contiguous loop */
1780
- if (iop == nop) {
1781
- return _allcontig_specialized_table[type_num][nop <= 3 ? nop : 0];
1782
- }
1783
-
1784
- /* None of the above specializations caught it, general loops */
1785
- return _unspecialized_table[type_num][nop <= 3 ? nop : 0];
1786
- }
1787
-
1788
- /*
1789
- * Parses the subscripts for one operand into an output
1790
- * of 'ndim' labels
1791
- */
1792
- static int
1793
- parse_operand_subscripts(char *subscripts, int length,
1794
- int ndim,
1795
- int iop, char *out_labels,
1796
- char *out_label_counts,
1797
- int *out_min_label,
1798
- int *out_max_label,
1799
- int *out_num_labels)
1800
- {
1801
- int i, idim, ndim_left, label;
1802
- int ellipsis = 0;
1803
-
1804
- /* Process the labels from the end until the ellipsis */
1805
- idim = ndim-1;
1806
- for (i = length-1; i >= 0; --i) {
1807
- label = subscripts[i];
1808
- /* A label for an axis */
1809
- if (label > 0 && isalpha(label)) {
1810
- if (idim >= 0) {
1811
- out_labels[idim--] = label;
1812
- /* Calculate the min and max labels */
1813
- if (label < *out_min_label) {
1814
- *out_min_label = label;
1815
- }
1816
- if (label > *out_max_label) {
1817
- *out_max_label = label;
1818
- }
1819
- /* If it's the first time we see this label, count it */
1820
- if (out_label_counts[label] == 0) {
1821
- (*out_num_labels)++;
1822
- }
1823
- out_label_counts[label]++;
1824
- }
1825
- else {
1826
- PyErr_Format(PyExc_ValueError,
1827
- "einstein sum subscripts string contains "
1828
- "too many subscripts for operand %d", iop);
1829
- return 0;
1830
- }
1831
- }
1832
- /* The end of the ellipsis */
1833
- else if (label == '.') {
1834
- /* A valid ellipsis */
1835
- if (i >= 2 && subscripts[i-1] == '.' && subscripts[i-2] == '.') {
1836
- ellipsis = 1;
1837
- length = i-2;
1838
- break;
1839
- }
1840
- else {
1841
- PyErr_SetString(PyExc_ValueError,
1842
- "einstein sum subscripts string contains a "
1843
- "'.' that is not part of an ellipsis ('...')");
1844
- return 0;
1845
-
1846
- }
1847
- }
1848
- else if (label != ' ') {
1849
- PyErr_Format(PyExc_ValueError,
1850
- "invalid subscript '%c' in einstein sum "
1851
- "subscripts string, subscripts must "
1852
- "be letters", (char)label);
1853
- return 0;
1854
- }
1855
- }
1856
-
1857
- if (!ellipsis && idim != -1) {
1858
- PyErr_Format(PyExc_ValueError,
1859
- "operand has more dimensions than subscripts "
1860
- "given in einstein sum, but no '...' ellipsis "
1861
- "provided to broadcast the extra dimensions.");
1862
- return 0;
1863
- }
1864
-
1865
- /* Reduce ndim to just the dimensions left to fill at the beginning */
1866
- ndim_left = idim+1;
1867
- idim = 0;
1868
-
1869
- /*
1870
- * If we stopped because of an ellipsis, start again from the beginning.
1871
- * The length was truncated to end at the ellipsis in this case.
1872
- */
1873
- if (i > 0) {
1874
- for (i = 0; i < length; ++i) {
1875
- label = subscripts[i];
1876
- /* A label for an axis */
1877
- if (label > 0 && isalnum(label)) {
1878
- if (idim < ndim_left) {
1879
- out_labels[idim++] = label;
1880
- /* Calculate the min and max labels */
1881
- if (label < *out_min_label) {
1882
- *out_min_label = label;
1883
- }
1884
- if (label > *out_max_label) {
1885
- *out_max_label = label;
1886
- }
1887
- /* If it's the first time we see this label, count it */
1888
- if (out_label_counts[label] == 0) {
1889
- (*out_num_labels)++;
1890
- }
1891
- out_label_counts[label]++;
1892
- }
1893
- else {
1894
- PyErr_Format(PyExc_ValueError,
1895
- "einstein sum subscripts string contains "
1896
- "too many subscripts for operand %d", iop);
1897
- return 0;
1898
- }
1899
- }
1900
- else if (label != ' ') {
1901
- PyErr_Format(PyExc_ValueError,
1902
- "invalid subscript '%c' in einstein sum "
1903
- "subscripts string, subscripts must "
1904
- "be letters", (char)label);
1905
- return 0;
1906
- }
1907
- }
1908
- }
1909
-
1910
- /* Set the remaining labels to 0 */
1911
- while (idim < ndim_left) {
1912
- out_labels[idim++] = 0;
1913
- }
1914
-
1915
- /*
1916
- * Find any labels duplicated for this operand, and turn them
1917
- * into negative offets to the axis to merge with.
1918
- *
1919
- * In C, the char type may be signed or unsigned, but with
1920
- * twos complement arithmetic the char is ok either way here, and
1921
- * later where it matters the char is cast to a signed char.
1922
- */
1923
- for (idim = 0; idim < ndim-1; ++idim) {
1924
- char *next;
1925
- /* If this is a proper label, find any duplicates of it */
1926
- label = out_labels[idim];
1927
- if (label > 0) {
1928
- /* Search for the next matching label */
1929
- next = (char *)memchr(out_labels+idim+1, label,
1930
- ndim-idim-1);
1931
- while (next != NULL) {
1932
- /* The offset from next to out_labels[idim] (negative) */
1933
- *next = (char)((out_labels+idim)-next);
1934
- /* Search for the next matching label */
1935
- next = (char *)memchr(next+1, label,
1936
- out_labels+ndim-1-next);
1937
- }
1938
- }
1939
- }
1940
-
1941
- return 1;
1942
- }
1943
-
1944
- /*
1945
- * Parses the subscripts for the output operand into an output
1946
- * that requires 'ndim_broadcast' unlabeled dimensions, returning
1947
- * the number of output dimensions. Returns -1 if there is an error.
1948
- */
1949
- static int
1950
- parse_output_subscripts(char *subscripts, int length,
1951
- int ndim_broadcast,
1952
- const char *label_counts,
1953
- char *out_labels)
1954
- {
1955
- int i, nlabels, label, idim, ndim, ndim_left;
1956
- int ellipsis = 0;
1957
-
1958
- /* Count the labels, making sure they're all unique and valid */
1959
- nlabels = 0;
1960
- for (i = 0; i < length; ++i) {
1961
- label = subscripts[i];
1962
- if (label > 0 && isalpha(label)) {
1963
- /* Check if it occurs again */
1964
- if (memchr(subscripts+i+1, label, length-i-1) == NULL) {
1965
- /* Check that it was used in the inputs */
1966
- if (label_counts[label] == 0) {
1967
- PyErr_Format(PyExc_ValueError,
1968
- "einstein sum subscripts string included "
1969
- "output subscript '%c' which never appeared "
1970
- "in an input", (char)label);
1971
- return -1;
1972
- }
1973
-
1974
- nlabels++;
1975
- }
1976
- else {
1977
- PyErr_Format(PyExc_ValueError,
1978
- "einstein sum subscripts string includes "
1979
- "output subscript '%c' multiple times",
1980
- (char)label);
1981
- return -1;
1982
- }
1983
- }
1984
- else if (label != '.' && label != ' ') {
1985
- PyErr_Format(PyExc_ValueError,
1986
- "invalid subscript '%c' in einstein sum "
1987
- "subscripts string, subscripts must "
1988
- "be letters", (char)label);
1989
- return -1;
1990
- }
1991
- }
1992
-
1993
- /* The number of output dimensions */
1994
- ndim = ndim_broadcast + nlabels;
1995
-
1996
- /* Process the labels from the end until the ellipsis */
1997
- idim = ndim-1;
1998
- for (i = length-1; i >= 0; --i) {
1999
- label = subscripts[i];
2000
- /* A label for an axis */
2001
- if (label != '.' && label != ' ') {
2002
- if (idim >= 0) {
2003
- out_labels[idim--] = label;
2004
- }
2005
- else {
2006
- PyErr_Format(PyExc_ValueError,
2007
- "einstein sum subscripts string contains "
2008
- "too many output subscripts");
2009
- return -1;
2010
- }
2011
- }
2012
- /* The end of the ellipsis */
2013
- else if (label == '.') {
2014
- /* A valid ellipsis */
2015
- if (i >= 2 && subscripts[i-1] == '.' && subscripts[i-2] == '.') {
2016
- ellipsis = 1;
2017
- length = i-2;
2018
- break;
2019
- }
2020
- else {
2021
- PyErr_SetString(PyExc_ValueError,
2022
- "einstein sum subscripts string contains a "
2023
- "'.' that is not part of an ellipsis ('...')");
2024
- return -1;
2025
-
2026
- }
2027
- }
2028
- }
2029
-
2030
- if (!ellipsis && idim != -1) {
2031
- PyErr_SetString(PyExc_ValueError,
2032
- "output has more dimensions than subscripts "
2033
- "given in einstein sum, but no '...' ellipsis "
2034
- "provided to broadcast the extra dimensions.");
2035
- return 0;
2036
- }
2037
-
2038
- /* Reduce ndim to just the dimensions left to fill at the beginning */
2039
- ndim_left = idim+1;
2040
- idim = 0;
2041
-
2042
- /*
2043
- * If we stopped because of an ellipsis, start again from the beginning.
2044
- * The length was truncated to end at the ellipsis in this case.
2045
- */
2046
- if (i > 0) {
2047
- for (i = 0; i < length; ++i) {
2048
- label = subscripts[i];
2049
- /* A label for an axis */
2050
- if (label != '.' && label != ' ') {
2051
- if (idim < ndim_left) {
2052
- out_labels[idim++] = label;
2053
- }
2054
- else {
2055
- PyErr_Format(PyExc_ValueError,
2056
- "einstein sum subscripts string contains "
2057
- "too many subscripts for the output");
2058
- return -1;
2059
- }
2060
- }
2061
- else {
2062
- PyErr_SetString(PyExc_ValueError,
2063
- "einstein sum subscripts string contains a "
2064
- "'.' that is not part of an ellipsis ('...')");
2065
- return -1;
2066
- }
2067
- }
2068
- }
2069
-
2070
- /* Set the remaining output labels to 0 */
2071
- while (idim < ndim_left) {
2072
- out_labels[idim++] = 0;
2073
- }
2074
-
2075
- return ndim;
2076
- }
2077
-
2078
-
2079
- /*
2080
- * When there's just one operand and no reduction, we
2081
- * can return a view into op. This calculates the view
2082
- * if possible.
2083
- */
2084
- static int
2085
- get_single_op_view(PyArrayObject *op, int iop, char *labels,
2086
- int ndim_output, char *output_labels,
2087
- PyArrayObject **ret)
2088
- {
2089
- npy_intp new_strides[NPY_MAXDIMS];
2090
- npy_intp new_dims[NPY_MAXDIMS];
2091
- char *out_label;
2092
- int label, i, idim, ndim, ibroadcast = 0;
2093
-
2094
- ndim = PyArray_NDIM(op);
2095
-
2096
- /* Initialize the dimensions and strides to zero */
2097
- for (idim = 0; idim < ndim_output; ++idim) {
2098
- new_dims[idim] = 0;
2099
- new_strides[idim] = 0;
2100
- }
2101
-
2102
- /* Match the labels in the operand with the output labels */
2103
- for (idim = 0; idim < ndim; ++idim) {
2104
- /*
2105
- * The char type may be either signed or unsigned, we
2106
- * need it to be signed here.
2107
- */
2108
- label = (signed char)labels[idim];
2109
- /* If this label says to merge axes, get the actual label */
2110
- if (label < 0) {
2111
- label = labels[idim+label];
2112
- }
2113
- /* If the label is 0, it's an unlabeled broadcast dimension */
2114
- if (label == 0) {
2115
- /* The next output label that's a broadcast dimension */
2116
- for (; ibroadcast < ndim_output; ++ibroadcast) {
2117
- if (output_labels[ibroadcast] == 0) {
2118
- break;
2119
- }
2120
- }
2121
- if (ibroadcast == ndim_output) {
2122
- PyErr_SetString(PyExc_ValueError,
2123
- "output had too few broadcast dimensions");
2124
- return 0;
2125
- }
2126
- new_dims[ibroadcast] = PyArray_DIM(op, idim);
2127
- new_strides[ibroadcast] = PyArray_STRIDE(op, idim);
2128
- ++ibroadcast;
2129
- }
2130
- else {
2131
- /* Find the position for this dimension in the output */
2132
- out_label = (char *)memchr(output_labels, label,
2133
- ndim_output);
2134
- /* If it's not found, reduction -> can't return a view */
2135
- if (out_label == NULL) {
2136
- break;
2137
- }
2138
- /* Update the dimensions and strides of the output */
2139
- i = out_label - output_labels;
2140
- if (new_dims[i] != 0 &&
2141
- new_dims[i] != PyArray_DIM(op, idim)) {
2142
- PyErr_Format(PyExc_ValueError,
2143
- "dimensions in operand %d for collapsing "
2144
- "index '%c' don't match (%d != %d)",
2145
- iop, label, (int)new_dims[i],
2146
- (int)PyArray_DIM(op, idim));
2147
- return 0;
2148
- }
2149
- new_dims[i] = PyArray_DIM(op, idim);
2150
- new_strides[i] += PyArray_STRIDE(op, idim);
2151
- }
2152
- }
2153
- /* If we processed all the input axes, return a view */
2154
- if (idim == ndim) {
2155
- Py_INCREF(PyArray_DESCR(op));
2156
- *ret = (PyArrayObject *)PyArray_NewFromDescr(
2157
- Py_TYPE(op),
2158
- PyArray_DESCR(op),
2159
- ndim_output, new_dims, new_strides,
2160
- PyArray_DATA(op),
2161
- 0, (PyObject *)op);
2162
-
2163
- if (*ret == NULL) {
2164
- return 0;
2165
- }
2166
- if (!PyArray_Check(*ret)) {
2167
- Py_DECREF(*ret);
2168
- *ret = NULL;
2169
- PyErr_SetString(PyExc_RuntimeError,
2170
- "NewFromDescr failed to return an array");
2171
- return 0;
2172
- }
2173
- PyArray_UpdateFlags(*ret,
2174
- NPY_ARRAY_C_CONTIGUOUS|
2175
- NPY_ARRAY_ALIGNED|
2176
- NPY_ARRAY_F_CONTIGUOUS);
2177
- Py_INCREF(op);
2178
- if (PyArray_SetBaseObject(*ret, (PyObject *)op) < 0) {
2179
- Py_DECREF(*ret);
2180
- *ret = NULL;
2181
- return 0;
2182
- }
2183
- return 1;
2184
- }
2185
-
2186
- /* Return success, but that we couldn't make a view */
2187
- *ret = NULL;
2188
- return 1;
2189
- }
2190
-
2191
- static PyArrayObject *
2192
- get_combined_dims_view(PyArrayObject *op, int iop, char *labels)
2193
- {
2194
- npy_intp new_strides[NPY_MAXDIMS];
2195
- npy_intp new_dims[NPY_MAXDIMS];
2196
- int i, idim, ndim, icombine, combineoffset, label;
2197
- int icombinemap[NPY_MAXDIMS];
2198
-
2199
- PyArrayObject *ret = NULL;
2200
-
2201
- ndim = PyArray_NDIM(op);
2202
-
2203
- /* Initialize the dimensions and strides to zero */
2204
- for (idim = 0; idim < ndim; ++idim) {
2205
- new_dims[idim] = 0;
2206
- new_strides[idim] = 0;
2207
- }
2208
-
2209
- /* Copy the dimensions and strides, except when collapsing */
2210
- icombine = 0;
2211
- for (idim = 0; idim < ndim; ++idim) {
2212
- /*
2213
- * The char type may be either signed or unsigned, we
2214
- * need it to be signed here.
2215
- */
2216
- label = (signed char)labels[idim];
2217
- /* If this label says to merge axes, get the actual label */
2218
- if (label < 0) {
2219
- combineoffset = label;
2220
- label = labels[idim+label];
2221
- }
2222
- else {
2223
- combineoffset = 0;
2224
- if (icombine != idim) {
2225
- labels[icombine] = labels[idim];
2226
- }
2227
- icombinemap[idim] = icombine;
2228
- }
2229
- /* If the label is 0, it's an unlabeled broadcast dimension */
2230
- if (label == 0) {
2231
- new_dims[icombine] = PyArray_DIM(op, idim);
2232
- new_strides[icombine] = PyArray_STRIDE(op, idim);
2233
- }
2234
- else {
2235
- /* Update the combined axis dimensions and strides */
2236
- i = idim + combineoffset;
2237
- if (combineoffset < 0 && new_dims[i] != 0 &&
2238
- new_dims[i] != PyArray_DIM(op, idim)) {
2239
- PyErr_Format(PyExc_ValueError,
2240
- "dimensions in operand %d for collapsing "
2241
- "index '%c' don't match (%d != %d)",
2242
- iop, label, (int)new_dims[i],
2243
- (int)PyArray_DIM(op, idim));
2244
- return NULL;
2245
- }
2246
- i = icombinemap[i];
2247
- new_dims[i] = PyArray_DIM(op, idim);
2248
- new_strides[i] += PyArray_STRIDE(op, idim);
2249
- }
2250
-
2251
- /* If the label didn't say to combine axes, increment dest i */
2252
- if (combineoffset == 0) {
2253
- icombine++;
2254
- }
2255
- }
2256
-
2257
- /* The compressed number of dimensions */
2258
- ndim = icombine;
2259
-
2260
- Py_INCREF(PyArray_DESCR(op));
2261
- ret = (PyArrayObject *)PyArray_NewFromDescr(
2262
- Py_TYPE(op),
2263
- PyArray_DESCR(op),
2264
- ndim, new_dims, new_strides,
2265
- PyArray_DATA(op),
2266
- PyArray_ISWRITEABLE(op) ? NPY_ARRAY_WRITEABLE : 0,
2267
- (PyObject *)op);
2268
-
2269
- if (ret == NULL) {
2270
- return NULL;
2271
- }
2272
- if (!PyArray_Check(ret)) {
2273
- Py_DECREF(ret);
2274
- PyErr_SetString(PyExc_RuntimeError,
2275
- "NewFromDescr failed to return an array");
2276
- return NULL;
2277
- }
2278
- PyArray_UpdateFlags(ret,
2279
- NPY_ARRAY_C_CONTIGUOUS|
2280
- NPY_ARRAY_ALIGNED|
2281
- NPY_ARRAY_F_CONTIGUOUS);
2282
- Py_INCREF(op);
2283
- if (PyArray_SetBaseObject(ret, (PyObject *)op) < 0) {
2284
- Py_DECREF(ret);
2285
- return NULL;
2286
- }
2287
-
2288
- return ret;
2289
- }
2290
-
2291
- static int
2292
- prepare_op_axes(int ndim, int iop, char *labels, int *axes,
2293
- int ndim_iter, char *iter_labels)
2294
- {
2295
- int i, label, ibroadcast;
2296
-
2297
- ibroadcast = ndim-1;
2298
- for (i = ndim_iter-1; i >= 0; --i) {
2299
- label = iter_labels[i];
2300
- /*
2301
- * If it's an unlabeled broadcast dimension, choose
2302
- * the next broadcast dimension from the operand.
2303
- */
2304
- if (label == 0) {
2305
- while (ibroadcast >= 0 && labels[ibroadcast] != 0) {
2306
- --ibroadcast;
2307
- }
2308
- /*
2309
- * If we used up all the operand broadcast dimensions,
2310
- * extend it with a "newaxis"
2311
- */
2312
- if (ibroadcast < 0) {
2313
- axes[i] = -1;
2314
- }
2315
- /* Otherwise map to the broadcast axis */
2316
- else {
2317
- axes[i] = ibroadcast;
2318
- --ibroadcast;
2319
- }
2320
- }
2321
- /* It's a labeled dimension, find the matching one */
2322
- else {
2323
- char *match = memchr(labels, label, ndim);
2324
- /* If the op doesn't have the label, broadcast it */
2325
- if (match == NULL) {
2326
- axes[i] = -1;
2327
- }
2328
- /* Otherwise use it */
2329
- else {
2330
- axes[i] = match - labels;
2331
- }
2332
- }
2333
- }
2334
-
2335
- return 1;
2336
- }
2337
-
2338
- static int
2339
- unbuffered_loop_nop1_ndim2(NpyIter *iter)
2340
- {
2341
- npy_intp coord, shape[2], strides[2][2];
2342
- char *ptrs[2][2], *ptr;
2343
- sum_of_products_fn sop;
2344
-
2345
- #if NPY_EINSUM_DBG_TRACING
2346
- NpyIter_DebugPrint(iter);
2347
- #endif
2348
- NPY_EINSUM_DBG_PRINT("running hand-coded 1-op 2-dim loop\n");
2349
-
2350
- NpyIter_GetShape(iter, shape);
2351
- memcpy(strides[0], NpyIter_GetAxisStrideArray(iter, 0),
2352
- 2*sizeof(npy_intp));
2353
- memcpy(strides[1], NpyIter_GetAxisStrideArray(iter, 1),
2354
- 2*sizeof(npy_intp));
2355
- memcpy(ptrs[0], NpyIter_GetInitialDataPtrArray(iter),
2356
- 2*sizeof(char *));
2357
- memcpy(ptrs[1], ptrs[0], 2*sizeof(char*));
2358
-
2359
- sop = get_sum_of_products_function(1,
2360
- NpyIter_GetDescrArray(iter)[0]->type_num,
2361
- NpyIter_GetDescrArray(iter)[0]->elsize,
2362
- strides[0]);
2363
-
2364
- if (sop == NULL) {
2365
- PyErr_SetString(PyExc_TypeError,
2366
- "invalid data type for einsum");
2367
- return -1;
2368
- }
2369
-
2370
- /*
2371
- * Since the iterator wasn't tracking coordinates, the
2372
- * loop provided by the iterator is in Fortran-order.
2373
- */
2374
- for (coord = shape[1]; coord > 0; --coord) {
2375
- sop(1, ptrs[0], strides[0], shape[0]);
2376
-
2377
- ptr = ptrs[1][0] + strides[1][0];
2378
- ptrs[0][0] = ptrs[1][0] = ptr;
2379
- ptr = ptrs[1][1] + strides[1][1];
2380
- ptrs[0][1] = ptrs[1][1] = ptr;
2381
- }
2382
-
2383
- return 0;
2384
- }
2385
-
2386
- static int
2387
- unbuffered_loop_nop1_ndim3(NpyIter *iter)
2388
- {
2389
- npy_intp coords[2], shape[3], strides[3][2];
2390
- char *ptrs[3][2], *ptr;
2391
- sum_of_products_fn sop;
2392
-
2393
- #if NPY_EINSUM_DBG_TRACING
2394
- NpyIter_DebugPrint(iter);
2395
- #endif
2396
- NPY_EINSUM_DBG_PRINT("running hand-coded 1-op 3-dim loop\n");
2397
-
2398
- NpyIter_GetShape(iter, shape);
2399
- memcpy(strides[0], NpyIter_GetAxisStrideArray(iter, 0),
2400
- 2*sizeof(npy_intp));
2401
- memcpy(strides[1], NpyIter_GetAxisStrideArray(iter, 1),
2402
- 2*sizeof(npy_intp));
2403
- memcpy(strides[2], NpyIter_GetAxisStrideArray(iter, 2),
2404
- 2*sizeof(npy_intp));
2405
- memcpy(ptrs[0], NpyIter_GetInitialDataPtrArray(iter),
2406
- 2*sizeof(char *));
2407
- memcpy(ptrs[1], ptrs[0], 2*sizeof(char*));
2408
- memcpy(ptrs[2], ptrs[0], 2*sizeof(char*));
2409
-
2410
- sop = get_sum_of_products_function(1,
2411
- NpyIter_GetDescrArray(iter)[0]->type_num,
2412
- NpyIter_GetDescrArray(iter)[0]->elsize,
2413
- strides[0]);
2414
-
2415
- if (sop == NULL) {
2416
- PyErr_SetString(PyExc_TypeError,
2417
- "invalid data type for einsum");
2418
- return -1;
2419
- }
2420
-
2421
- /*
2422
- * Since the iterator wasn't tracking coordinates, the
2423
- * loop provided by the iterator is in Fortran-order.
2424
- */
2425
- for (coords[1] = shape[2]; coords[1] > 0; --coords[1]) {
2426
- for (coords[0] = shape[1]; coords[0] > 0; --coords[0]) {
2427
- sop(1, ptrs[0], strides[0], shape[0]);
2428
-
2429
- ptr = ptrs[1][0] + strides[1][0];
2430
- ptrs[0][0] = ptrs[1][0] = ptr;
2431
- ptr = ptrs[1][1] + strides[1][1];
2432
- ptrs[0][1] = ptrs[1][1] = ptr;
2433
- }
2434
- ptr = ptrs[2][0] + strides[2][0];
2435
- ptrs[0][0] = ptrs[1][0] = ptrs[2][0] = ptr;
2436
- ptr = ptrs[2][1] + strides[2][1];
2437
- ptrs[0][1] = ptrs[1][1] = ptrs[2][1] = ptr;
2438
- }
2439
-
2440
- return 0;
2441
- }
2442
-
2443
- static int
2444
- unbuffered_loop_nop2_ndim2(NpyIter *iter)
2445
- {
2446
- npy_intp coord, shape[2], strides[2][3];
2447
- char *ptrs[2][3], *ptr;
2448
- sum_of_products_fn sop;
2449
-
2450
- #if NPY_EINSUM_DBG_TRACING
2451
- NpyIter_DebugPrint(iter);
2452
- #endif
2453
- NPY_EINSUM_DBG_PRINT("running hand-coded 2-op 2-dim loop\n");
2454
-
2455
- NpyIter_GetShape(iter, shape);
2456
- memcpy(strides[0], NpyIter_GetAxisStrideArray(iter, 0),
2457
- 3*sizeof(npy_intp));
2458
- memcpy(strides[1], NpyIter_GetAxisStrideArray(iter, 1),
2459
- 3*sizeof(npy_intp));
2460
- memcpy(ptrs[0], NpyIter_GetInitialDataPtrArray(iter),
2461
- 3*sizeof(char *));
2462
- memcpy(ptrs[1], ptrs[0], 3*sizeof(char*));
2463
-
2464
- sop = get_sum_of_products_function(2,
2465
- NpyIter_GetDescrArray(iter)[0]->type_num,
2466
- NpyIter_GetDescrArray(iter)[0]->elsize,
2467
- strides[0]);
2468
-
2469
- if (sop == NULL) {
2470
- PyErr_SetString(PyExc_TypeError,
2471
- "invalid data type for einsum");
2472
- return -1;
2473
- }
2474
-
2475
- /*
2476
- * Since the iterator wasn't tracking coordinates, the
2477
- * loop provided by the iterator is in Fortran-order.
2478
- */
2479
- for (coord = shape[1]; coord > 0; --coord) {
2480
- sop(2, ptrs[0], strides[0], shape[0]);
2481
-
2482
- ptr = ptrs[1][0] + strides[1][0];
2483
- ptrs[0][0] = ptrs[1][0] = ptr;
2484
- ptr = ptrs[1][1] + strides[1][1];
2485
- ptrs[0][1] = ptrs[1][1] = ptr;
2486
- ptr = ptrs[1][2] + strides[1][2];
2487
- ptrs[0][2] = ptrs[1][2] = ptr;
2488
- }
2489
-
2490
- return 0;
2491
- }
2492
-
2493
- static int
2494
- unbuffered_loop_nop2_ndim3(NpyIter *iter)
2495
- {
2496
- npy_intp coords[2], shape[3], strides[3][3];
2497
- char *ptrs[3][3], *ptr;
2498
- sum_of_products_fn sop;
2499
-
2500
- #if NPY_EINSUM_DBG_TRACING
2501
- NpyIter_DebugPrint(iter);
2502
- #endif
2503
- NPY_EINSUM_DBG_PRINT("running hand-coded 2-op 3-dim loop\n");
2504
-
2505
- NpyIter_GetShape(iter, shape);
2506
- memcpy(strides[0], NpyIter_GetAxisStrideArray(iter, 0),
2507
- 3*sizeof(npy_intp));
2508
- memcpy(strides[1], NpyIter_GetAxisStrideArray(iter, 1),
2509
- 3*sizeof(npy_intp));
2510
- memcpy(strides[2], NpyIter_GetAxisStrideArray(iter, 2),
2511
- 3*sizeof(npy_intp));
2512
- memcpy(ptrs[0], NpyIter_GetInitialDataPtrArray(iter),
2513
- 3*sizeof(char *));
2514
- memcpy(ptrs[1], ptrs[0], 3*sizeof(char*));
2515
- memcpy(ptrs[2], ptrs[0], 3*sizeof(char*));
2516
-
2517
- sop = get_sum_of_products_function(2,
2518
- NpyIter_GetDescrArray(iter)[0]->type_num,
2519
- NpyIter_GetDescrArray(iter)[0]->elsize,
2520
- strides[0]);
2521
-
2522
- if (sop == NULL) {
2523
- PyErr_SetString(PyExc_TypeError,
2524
- "invalid data type for einsum");
2525
- return -1;
2526
- }
2527
-
2528
- /*
2529
- * Since the iterator wasn't tracking coordinates, the
2530
- * loop provided by the iterator is in Fortran-order.
2531
- */
2532
- for (coords[1] = shape[2]; coords[1] > 0; --coords[1]) {
2533
- for (coords[0] = shape[1]; coords[0] > 0; --coords[0]) {
2534
- sop(2, ptrs[0], strides[0], shape[0]);
2535
-
2536
- ptr = ptrs[1][0] + strides[1][0];
2537
- ptrs[0][0] = ptrs[1][0] = ptr;
2538
- ptr = ptrs[1][1] + strides[1][1];
2539
- ptrs[0][1] = ptrs[1][1] = ptr;
2540
- ptr = ptrs[1][2] + strides[1][2];
2541
- ptrs[0][2] = ptrs[1][2] = ptr;
2542
- }
2543
- ptr = ptrs[2][0] + strides[2][0];
2544
- ptrs[0][0] = ptrs[1][0] = ptrs[2][0] = ptr;
2545
- ptr = ptrs[2][1] + strides[2][1];
2546
- ptrs[0][1] = ptrs[1][1] = ptrs[2][1] = ptr;
2547
- ptr = ptrs[2][2] + strides[2][2];
2548
- ptrs[0][2] = ptrs[1][2] = ptrs[2][2] = ptr;
2549
- }
2550
-
2551
- return 0;
2552
- }
2553
-
2554
-
2555
- /*NUMPY_API
2556
- * This function provides summation of array elements according to
2557
- * the Einstein summation convention. For example:
2558
- * - trace(a) -> einsum("ii", a)
2559
- * - transpose(a) -> einsum("ji", a)
2560
- * - multiply(a,b) -> einsum(",", a, b)
2561
- * - inner(a,b) -> einsum("i,i", a, b)
2562
- * - outer(a,b) -> einsum("i,j", a, b)
2563
- * - matvec(a,b) -> einsum("ij,j", a, b)
2564
- * - matmat(a,b) -> einsum("ij,jk", a, b)
2565
- *
2566
- * subscripts: The string of subscripts for einstein summation.
2567
- * nop: The number of operands
2568
- * op_in: The array of operands
2569
- * dtype: Either NULL, or the data type to force the calculation as.
2570
- * order: The order for the calculation/the output axes.
2571
- * casting: What kind of casts should be permitted.
2572
- * out: Either NULL, or an array into which the output should be placed.
2573
- *
2574
- * By default, the labels get placed in alphabetical order
2575
- * at the end of the output. So, if c = einsum("i,j", a, b)
2576
- * then c[i,j] == a[i]*b[j], but if c = einsum("j,i", a, b)
2577
- * then c[i,j] = a[j]*b[i].
2578
- *
2579
- * Alternatively, you can control the output order or prevent
2580
- * an axis from being summed/force an axis to be summed by providing
2581
- * indices for the output. This allows us to turn 'trace' into
2582
- * 'diag', for example.
2583
- * - diag(a) -> einsum("ii->i", a)
2584
- * - sum(a, axis=0) -> einsum("i...->", a)
2585
- *
2586
- * Subscripts at the beginning and end may be specified by
2587
- * putting an ellipsis "..." in the middle. For example,
2588
- * the function einsum("i...i", a) takes the diagonal of
2589
- * the first and last dimensions of the operand, and
2590
- * einsum("ij...,jk...->ik...") takes the matrix product using
2591
- * the first two indices of each operand instead of the last two.
2592
- *
2593
- * When there is only one operand, no axes being summed, and
2594
- * no output parameter, this function returns a view
2595
- * into the operand instead of making a copy.
2596
- */
2597
- NPY_NO_EXPORT PyArrayObject *
2598
- PyArray_EinsteinSum(char *subscripts, npy_intp nop,
2599
- PyArrayObject **op_in,
2600
- PyArray_Descr *dtype,
2601
- NPY_ORDER order, NPY_CASTING casting,
2602
- PyArrayObject *out)
2603
- {
2604
- int iop, label, min_label = 127, max_label = 0, num_labels;
2605
- char label_counts[128];
2606
- char op_labels[NPY_MAXARGS][NPY_MAXDIMS];
2607
- char output_labels[NPY_MAXDIMS], *iter_labels;
2608
- int idim, ndim_output, ndim_broadcast, ndim_iter;
2609
-
2610
- PyArrayObject *op[NPY_MAXARGS], *ret = NULL;
2611
- PyArray_Descr *op_dtypes_array[NPY_MAXARGS], **op_dtypes;
2612
-
2613
- int op_axes_arrays[NPY_MAXARGS][NPY_MAXDIMS];
2614
- int *op_axes[NPY_MAXARGS];
2615
- npy_uint32 op_flags[NPY_MAXARGS];
2616
-
2617
- NpyIter *iter;
2618
- sum_of_products_fn sop;
2619
- npy_intp fixed_strides[NPY_MAXARGS];
2620
-
2621
- /* nop+1 (+1 is for the output) must fit in NPY_MAXARGS */
2622
- if (nop >= NPY_MAXARGS) {
2623
- PyErr_SetString(PyExc_ValueError,
2624
- "too many operands provided to einstein sum function");
2625
- return NULL;
2626
- }
2627
- else if (nop < 1) {
2628
- PyErr_SetString(PyExc_ValueError,
2629
- "not enough operands provided to einstein sum function");
2630
- return NULL;
2631
- }
2632
-
2633
- /* Parse the subscripts string into label_counts and op_labels */
2634
- memset(label_counts, 0, sizeof(label_counts));
2635
- num_labels = 0;
2636
- for (iop = 0; iop < nop; ++iop) {
2637
- int length = (int)strcspn(subscripts, ",-");
2638
-
2639
- if (iop == nop-1 && subscripts[length] == ',') {
2640
- PyErr_SetString(PyExc_ValueError,
2641
- "more operands provided to einstein sum function "
2642
- "than specified in the subscripts string");
2643
- return NULL;
2644
- }
2645
- else if(iop < nop-1 && subscripts[length] != ',') {
2646
- PyErr_SetString(PyExc_ValueError,
2647
- "fewer operands provided to einstein sum function "
2648
- "than specified in the subscripts string");
2649
- return NULL;
2650
- }
2651
-
2652
- if (!parse_operand_subscripts(subscripts, length,
2653
- PyArray_NDIM(op_in[iop]),
2654
- iop, op_labels[iop], label_counts,
2655
- &min_label, &max_label, &num_labels)) {
2656
- return NULL;
2657
- }
2658
-
2659
- /* Move subscripts to the start of the labels for the next op */
2660
- subscripts += length;
2661
- if (iop < nop-1) {
2662
- subscripts++;
2663
- }
2664
- }
2665
-
2666
- /*
2667
- * Find the number of broadcast dimensions, which is the maximum
2668
- * number of labels == 0 in an op_labels array.
2669
- */
2670
- ndim_broadcast = 0;
2671
- for (iop = 0; iop < nop; ++iop) {
2672
- npy_intp count_zeros = 0;
2673
- int ndim;
2674
- char *labels = op_labels[iop];
2675
-
2676
- ndim = PyArray_NDIM(op_in[iop]);
2677
- for (idim = 0; idim < ndim; ++idim) {
2678
- if (labels[idim] == 0) {
2679
- ++count_zeros;
2680
- }
2681
- }
2682
-
2683
- if (count_zeros > ndim_broadcast) {
2684
- ndim_broadcast = count_zeros;
2685
- }
2686
- }
2687
-
2688
- /*
2689
- * If there is no output signature, create one using each label
2690
- * that appeared once, in alphabetical order
2691
- */
2692
- if (subscripts[0] == '\0') {
2693
- char outsubscripts[NPY_MAXDIMS + 3];
2694
- int length;
2695
- /* If no output was specified, always broadcast left (like normal) */
2696
- outsubscripts[0] = '.';
2697
- outsubscripts[1] = '.';
2698
- outsubscripts[2] = '.';
2699
- length = 3;
2700
- for (label = min_label; label <= max_label; ++label) {
2701
- if (label_counts[label] == 1) {
2702
- if (length < NPY_MAXDIMS-1) {
2703
- outsubscripts[length++] = label;
2704
- }
2705
- else {
2706
- PyErr_SetString(PyExc_ValueError,
2707
- "einstein sum subscript string has too many "
2708
- "distinct labels");
2709
- return NULL;
2710
- }
2711
- }
2712
- }
2713
- /* Parse the output subscript string */
2714
- ndim_output = parse_output_subscripts(outsubscripts, length,
2715
- ndim_broadcast, label_counts,
2716
- output_labels);
2717
- }
2718
- else {
2719
- if (subscripts[0] != '-' || subscripts[1] != '>') {
2720
- PyErr_SetString(PyExc_ValueError,
2721
- "einstein sum subscript string does not "
2722
- "contain proper '->' output specified");
2723
- return NULL;
2724
- }
2725
- subscripts += 2;
2726
-
2727
- /* Parse the output subscript string */
2728
- ndim_output = parse_output_subscripts(subscripts, strlen(subscripts),
2729
- ndim_broadcast, label_counts,
2730
- output_labels);
2731
- }
2732
- if (ndim_output < 0) {
2733
- return NULL;
2734
- }
2735
-
2736
- if (out != NULL && PyArray_NDIM(out) != ndim_output) {
2737
- PyErr_Format(PyExc_ValueError,
2738
- "out parameter does not have the correct number of "
2739
- "dimensions, has %d but should have %d",
2740
- (int)PyArray_NDIM(out), (int)ndim_output);
2741
- return NULL;
2742
- }
2743
-
2744
- /* Set all the op references to NULL */
2745
- for (iop = 0; iop < nop; ++iop) {
2746
- op[iop] = NULL;
2747
- }
2748
-
2749
- /*
2750
- * Process all the input ops, combining dimensions into their
2751
- * diagonal where specified.
2752
- */
2753
- for (iop = 0; iop < nop; ++iop) {
2754
- char *labels = op_labels[iop];
2755
- int combine, ndim;
2756
-
2757
- ndim = PyArray_NDIM(op_in[iop]);
2758
-
2759
- /*
2760
- * If there's just one operand and no output parameter,
2761
- * first try remapping the axes to the output to return
2762
- * a view instead of a copy.
2763
- */
2764
- if (iop == 0 && nop == 1 && out == NULL) {
2765
- ret = NULL;
2766
-
2767
- if (!get_single_op_view(op_in[iop], iop, labels,
2768
- ndim_output, output_labels,
2769
- &ret)) {
2770
- return NULL;
2771
- }
2772
-
2773
- if (ret != NULL) {
2774
- return ret;
2775
- }
2776
- }
2777
-
2778
- /*
2779
- * Check whether any dimensions need to be combined
2780
- *
2781
- * The char type may be either signed or unsigned, we
2782
- * need it to be signed here.
2783
- */
2784
- combine = 0;
2785
- for (idim = 0; idim < ndim; ++idim) {
2786
- if ((signed char)labels[idim] < 0) {
2787
- combine = 1;
2788
- }
2789
- }
2790
-
2791
- /* If any dimensions are combined, create a view which combines them */
2792
- if (combine) {
2793
- op[iop] = get_combined_dims_view(op_in[iop], iop, labels);
2794
- if (op[iop] == NULL) {
2795
- goto fail;
2796
- }
2797
- }
2798
- /* No combining needed */
2799
- else {
2800
- Py_INCREF(op_in[iop]);
2801
- op[iop] = op_in[iop];
2802
- }
2803
- }
2804
-
2805
- /* Set the output op */
2806
- op[nop] = out;
2807
-
2808
- /*
2809
- * Set up the labels for the iterator (output + combined labels).
2810
- * Can just share the output_labels memory, because iter_labels
2811
- * is output_labels with some more labels appended.
2812
- */
2813
- iter_labels = output_labels;
2814
- ndim_iter = ndim_output;
2815
- for (label = min_label; label <= max_label; ++label) {
2816
- if (label_counts[label] > 0 &&
2817
- memchr(output_labels, label, ndim_output) == NULL) {
2818
- if (ndim_iter >= NPY_MAXDIMS) {
2819
- PyErr_SetString(PyExc_ValueError,
2820
- "too many subscripts in einsum");
2821
- goto fail;
2822
- }
2823
- iter_labels[ndim_iter++] = label;
2824
- }
2825
- }
2826
-
2827
- /* Set up the op_axes for the iterator */
2828
- for (iop = 0; iop < nop; ++iop) {
2829
- op_axes[iop] = op_axes_arrays[iop];
2830
-
2831
- if (!prepare_op_axes(PyArray_NDIM(op[iop]), iop, op_labels[iop],
2832
- op_axes[iop], ndim_iter, iter_labels)) {
2833
- goto fail;
2834
- }
2835
- }
2836
-
2837
- /* Set up the op_dtypes if dtype was provided */
2838
- if (dtype == NULL) {
2839
- op_dtypes = NULL;
2840
- }
2841
- else {
2842
- op_dtypes = op_dtypes_array;
2843
- for (iop = 0; iop <= nop; ++iop) {
2844
- op_dtypes[iop] = dtype;
2845
- }
2846
- }
2847
-
2848
- /* Set the op_axes for the output */
2849
- op_axes[nop] = op_axes_arrays[nop];
2850
- for (idim = 0; idim < ndim_output; ++idim) {
2851
- op_axes[nop][idim] = idim;
2852
- }
2853
- for (idim = ndim_output; idim < ndim_iter; ++idim) {
2854
- op_axes[nop][idim] = -1;
2855
- }
2856
-
2857
- /* Set the iterator per-op flags */
2858
-
2859
- for (iop = 0; iop < nop; ++iop) {
2860
- op_flags[iop] = NPY_ITER_READONLY|
2861
- NPY_ITER_NBO|
2862
- NPY_ITER_ALIGNED;
2863
- }
2864
- op_flags[nop] = NPY_ITER_READWRITE|
2865
- NPY_ITER_NBO|
2866
- NPY_ITER_ALIGNED|
2867
- NPY_ITER_ALLOCATE|
2868
- NPY_ITER_NO_BROADCAST;
2869
-
2870
- /* Allocate the iterator */
2871
- iter = NpyIter_AdvancedNew(nop+1, op, NPY_ITER_EXTERNAL_LOOP|
2872
- ((dtype != NULL) ? 0 : NPY_ITER_COMMON_DTYPE)|
2873
- NPY_ITER_BUFFERED|
2874
- NPY_ITER_DELAY_BUFALLOC|
2875
- NPY_ITER_GROWINNER|
2876
- NPY_ITER_REDUCE_OK|
2877
- NPY_ITER_REFS_OK|
2878
- NPY_ITER_ZEROSIZE_OK,
2879
- order, casting,
2880
- op_flags, op_dtypes,
2881
- ndim_iter, op_axes, NULL, 0);
2882
-
2883
- if (iter == NULL) {
2884
- goto fail;
2885
- }
2886
-
2887
- /* Initialize the output to all zeros and reset the iterator */
2888
- ret = NpyIter_GetOperandArray(iter)[nop];
2889
- Py_INCREF(ret);
2890
- PyArray_AssignZero(ret, NULL);
2891
-
2892
-
2893
- /***************************/
2894
- /*
2895
- * Acceleration for some specific loop structures. Note
2896
- * that with axis coalescing, inputs with more dimensions can
2897
- * be reduced to fit into these patterns.
2898
- */
2899
- if (!NpyIter_RequiresBuffering(iter)) {
2900
- int ndim = NpyIter_GetNDim(iter);
2901
- switch (nop) {
2902
- case 1:
2903
- if (ndim == 2) {
2904
- if (unbuffered_loop_nop1_ndim2(iter) < 0) {
2905
- Py_DECREF(ret);
2906
- ret = NULL;
2907
- goto fail;
2908
- }
2909
- goto finish;
2910
- }
2911
- else if (ndim == 3) {
2912
- if (unbuffered_loop_nop1_ndim3(iter) < 0) {
2913
- Py_DECREF(ret);
2914
- ret = NULL;
2915
- goto fail;
2916
- }
2917
- goto finish;
2918
- }
2919
- break;
2920
- case 2:
2921
- if (ndim == 2) {
2922
- if (unbuffered_loop_nop2_ndim2(iter) < 0) {
2923
- Py_DECREF(ret);
2924
- ret = NULL;
2925
- goto fail;
2926
- }
2927
- goto finish;
2928
- }
2929
- else if (ndim == 3) {
2930
- if (unbuffered_loop_nop2_ndim3(iter) < 0) {
2931
- Py_DECREF(ret);
2932
- ret = NULL;
2933
- goto fail;
2934
- }
2935
- goto finish;
2936
- }
2937
- break;
2938
- }
2939
- }
2940
- /***************************/
2941
-
2942
- if (NpyIter_Reset(iter, NULL) != NPY_SUCCEED) {
2943
- Py_DECREF(ret);
2944
- goto fail;
2945
- }
2946
-
2947
- /*
2948
- * Get an inner loop function, specializing it based on
2949
- * the strides that are fixed for the whole loop.
2950
- */
2951
- NpyIter_GetInnerFixedStrideArray(iter, fixed_strides);
2952
- sop = get_sum_of_products_function(nop,
2953
- NpyIter_GetDescrArray(iter)[0]->type_num,
2954
- NpyIter_GetDescrArray(iter)[0]->elsize,
2955
- fixed_strides);
2956
-
2957
- #if NPY_EINSUM_DBG_TRACING
2958
- NpyIter_DebugPrint(iter);
2959
- #endif
2960
-
2961
- /* Finally, the main loop */
2962
- if (sop == NULL) {
2963
- PyErr_SetString(PyExc_TypeError,
2964
- "invalid data type for einsum");
2965
- Py_DECREF(ret);
2966
- ret = NULL;
2967
- }
2968
- else if (NpyIter_GetIterSize(iter) != 0) {
2969
- NpyIter_IterNextFunc *iternext;
2970
- char **dataptr;
2971
- npy_intp *stride;
2972
- npy_intp *countptr;
2973
- NPY_BEGIN_THREADS_DEF;
2974
-
2975
- iternext = NpyIter_GetIterNext(iter, NULL);
2976
- if (iternext == NULL) {
2977
- NpyIter_Deallocate(iter);
2978
- Py_DECREF(ret);
2979
- goto fail;
2980
- }
2981
- dataptr = NpyIter_GetDataPtrArray(iter);
2982
- stride = NpyIter_GetInnerStrideArray(iter);
2983
- countptr = NpyIter_GetInnerLoopSizePtr(iter);
2984
-
2985
- NPY_BEGIN_THREADS_NDITER(iter);
2986
- NPY_EINSUM_DBG_PRINT("Einsum loop\n");
2987
- do {
2988
- sop(nop, dataptr, stride, *countptr);
2989
- } while(iternext(iter));
2990
- NPY_END_THREADS;
2991
-
2992
- /* If the API was needed, it may have thrown an error */
2993
- if (NpyIter_IterationNeedsAPI(iter) && PyErr_Occurred()) {
2994
- Py_DECREF(ret);
2995
- ret = NULL;
2996
- }
2997
- }
2998
-
2999
- finish:
3000
- NpyIter_Deallocate(iter);
3001
- for (iop = 0; iop < nop; ++iop) {
3002
- Py_DECREF(op[iop]);
3003
- }
3004
-
3005
- return ret;
3006
-
3007
- fail:
3008
- for (iop = 0; iop < nop; ++iop) {
3009
- Py_XDECREF(op[iop]);
3010
- }
3011
-
3012
- return NULL;
3013
- }