numpy 1.9.2__zip → 1.10.0__zip

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1593) 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/scipy-sphinx-theme/.git +1 -0
  12. numpy-1.10.0.post2/doc/source/conf.py +331 -0
  13. numpy-1.10.0.post2/doc/source/dev/development_environment.rst +211 -0
  14. numpy-1.10.0.post2/doc/source/dev/gitwash/development_workflow.rst +534 -0
  15. numpy-1.10.0.post2/doc/source/dev/gitwash/git_links.inc +95 -0
  16. numpy-1.10.0.post2/doc/source/dev/gitwash/index.rst +14 -0
  17. numpy-1.10.0.post2/doc/source/dev/index.rst +11 -0
  18. numpy-1.10.0.post2/doc/source/reference/arrays.classes.rst +490 -0
  19. numpy-1.10.0.post2/doc/source/reference/arrays.dtypes.rst +536 -0
  20. numpy-1.10.0.post2/doc/source/reference/arrays.indexing.rst +549 -0
  21. numpy-1.10.0.post2/doc/source/reference/arrays.interface.rst +337 -0
  22. numpy-1.10.0.post2/doc/source/reference/arrays.ndarray.rst +622 -0
  23. numpy-1.10.0.post2/doc/source/reference/arrays.scalars.rst +291 -0
  24. numpy-1.10.0.post2/doc/source/reference/c-api.array.rst +3393 -0
  25. numpy-1.10.0.post2/doc/source/reference/c-api.config.rst +103 -0
  26. numpy-1.10.0.post2/doc/source/reference/c-api.coremath.rst +420 -0
  27. numpy-1.10.0.post2/doc/source/reference/c-api.dtype.rst +376 -0
  28. numpy-1.10.0.post2/doc/source/reference/c-api.generalized-ufuncs.rst +191 -0
  29. numpy-1.10.0.post2/doc/source/reference/c-api.iterator.rst +1300 -0
  30. numpy-1.10.0.post2/doc/source/reference/c-api.types-and-structures.rst +1240 -0
  31. numpy-1.10.0.post2/doc/source/reference/c-api.ufunc.rst +413 -0
  32. numpy-1.10.0.post2/doc/source/reference/index.rst +43 -0
  33. numpy-1.10.0.post2/doc/source/reference/internals.code-explanations.rst +615 -0
  34. numpy-1.10.0.post2/doc/source/reference/routines.array-manipulation.rst +115 -0
  35. numpy-1.10.0.post2/doc/source/reference/routines.io.rst +78 -0
  36. numpy-1.10.0.post2/doc/source/reference/routines.linalg.rst +91 -0
  37. numpy-1.10.0.post2/doc/source/reference/routines.ma.rst +407 -0
  38. numpy-1.10.0.post2/doc/source/reference/routines.sort.rst +41 -0
  39. numpy-1.10.0.post2/doc/source/reference/routines.statistics.rst +57 -0
  40. numpy-1.10.0.post2/doc/source/reference/swig.interface-file.rst +1066 -0
  41. numpy-1.10.0.post2/doc/source/reference/swig.testing.rst +167 -0
  42. numpy-1.10.0.post2/doc/source/reference/ufuncs.rst +666 -0
  43. numpy-1.10.0.post2/doc/source/release.rst +20 -0
  44. numpy-1.10.0.post2/doc/source/user/basics.io.genfromtxt.rst +531 -0
  45. numpy-1.10.0.post2/doc/source/user/basics.rec.rst +7 -0
  46. numpy-1.10.0.post2/doc/source/user/c-info.beyond-basics.rst +560 -0
  47. numpy-1.10.0.post2/doc/source/user/c-info.how-to-extend.rst +642 -0
  48. numpy-1.10.0.post2/doc/source/user/c-info.python-as-glue.rst +1177 -0
  49. numpy-1.10.0.post2/doc/source/user/c-info.ufunc-tutorial.rst +1211 -0
  50. numpy-1.10.0.post2/doc/source/user/install.rst +194 -0
  51. numpy-1.10.0.post2/doc/sphinxext/.git +1 -0
  52. numpy-1.10.0.post2/numpy/__init__.py +227 -0
  53. numpy-1.10.0.post2/numpy/_build_utils/README +8 -0
  54. numpy-1.10.0.post2/numpy/_build_utils/apple_accelerate.py +21 -0
  55. numpy-1.10.0.post2/numpy/_build_utils/common.py +138 -0
  56. numpy-1.10.0.post2/numpy/_build_utils/src/apple_sgemv_fix.c +227 -0
  57. numpy-1.10.0.post2/numpy/_build_utils/waf.py +531 -0
  58. numpy-1.10.0.post2/numpy/_import_tools.py +353 -0
  59. numpy-1.10.0.post2/numpy/add_newdocs.py +7611 -0
  60. numpy-1.10.0.post2/numpy/compat/_inspect.py +194 -0
  61. numpy-1.10.0.post2/numpy/compat/py3k.py +88 -0
  62. numpy-1.10.0.post2/numpy/compat/setup.py +12 -0
  63. numpy-1.10.0.post2/numpy/core/__init__.py +89 -0
  64. numpy-1.10.0.post2/numpy/core/_internal.py +761 -0
  65. numpy-1.10.0.post2/numpy/core/_methods.py +133 -0
  66. numpy-1.10.0.post2/numpy/core/arrayprint.py +760 -0
  67. numpy-1.10.0.post2/numpy/core/code_generators/cversions.txt +34 -0
  68. numpy-1.10.0.post2/numpy/core/code_generators/generate_ufunc_api.py +219 -0
  69. numpy-1.10.0.post2/numpy/core/code_generators/generate_umath.py +1017 -0
  70. numpy-1.10.0.post2/numpy/core/code_generators/numpy_api.py +415 -0
  71. numpy-1.10.0.post2/numpy/core/code_generators/ufunc_docstrings.py +3442 -0
  72. numpy-1.10.0.post2/numpy/core/defchararray.py +2689 -0
  73. numpy-1.10.0.post2/numpy/core/fromnumeric.py +3089 -0
  74. numpy-1.10.0.post2/numpy/core/function_base.py +203 -0
  75. numpy-1.10.0.post2/numpy/core/getlimits.py +308 -0
  76. numpy-1.10.0.post2/numpy/core/include/numpy/ndarrayobject.h +246 -0
  77. numpy-1.10.0.post2/numpy/core/include/numpy/ndarraytypes.h +1797 -0
  78. numpy-1.10.0.post2/numpy/core/include/numpy/npy_3kcompat.h +448 -0
  79. numpy-1.10.0.post2/numpy/core/include/numpy/npy_common.h +1051 -0
  80. numpy-1.10.0.post2/numpy/core/include/numpy/npy_cpu.h +92 -0
  81. numpy-1.10.0.post2/numpy/core/include/numpy/npy_endian.h +61 -0
  82. numpy-1.10.0.post2/numpy/core/include/numpy/npy_math.h +525 -0
  83. numpy-1.10.0.post2/numpy/core/include/numpy/numpyconfig.h +36 -0
  84. numpy-1.10.0.post2/numpy/core/machar.py +342 -0
  85. numpy-1.10.0.post2/numpy/core/memmap.py +311 -0
  86. numpy-1.10.0.post2/numpy/core/numeric.py +2893 -0
  87. numpy-1.10.0.post2/numpy/core/numerictypes.py +1036 -0
  88. numpy-1.10.0.post2/numpy/core/records.py +846 -0
  89. numpy-1.10.0.post2/numpy/core/setup.py +983 -0
  90. numpy-1.10.0.post2/numpy/core/setup_common.py +352 -0
  91. numpy-1.10.0.post2/numpy/core/shape_base.py +350 -0
  92. numpy-1.10.0.post2/numpy/core/src/multiarray/alloc.c +244 -0
  93. numpy-1.10.0.post2/numpy/core/src/multiarray/arrayobject.c +1858 -0
  94. numpy-1.10.0.post2/numpy/core/src/multiarray/arraytypes.c.src +4738 -0
  95. numpy-1.10.0.post2/numpy/core/src/multiarray/arraytypes.h +37 -0
  96. numpy-1.10.0.post2/numpy/core/src/multiarray/buffer.c +981 -0
  97. numpy-1.10.0.post2/numpy/core/src/multiarray/calculation.c +1224 -0
  98. numpy-1.10.0.post2/numpy/core/src/multiarray/cblasfuncs.c +812 -0
  99. numpy-1.10.0.post2/numpy/core/src/multiarray/cblasfuncs.h +10 -0
  100. numpy-1.10.0.post2/numpy/core/src/multiarray/common.c +911 -0
  101. numpy-1.10.0.post2/numpy/core/src/multiarray/common.h +250 -0
  102. numpy-1.10.0.post2/numpy/core/src/multiarray/compiled_base.c +1664 -0
  103. numpy-1.10.0.post2/numpy/core/src/multiarray/compiled_base.h +24 -0
  104. numpy-1.10.0.post2/numpy/core/src/multiarray/conversion_utils.c +1217 -0
  105. numpy-1.10.0.post2/numpy/core/src/multiarray/convert.c +590 -0
  106. numpy-1.10.0.post2/numpy/core/src/multiarray/convert_datatype.c +2155 -0
  107. numpy-1.10.0.post2/numpy/core/src/multiarray/ctors.c +3838 -0
  108. numpy-1.10.0.post2/numpy/core/src/multiarray/datetime.c +3821 -0
  109. numpy-1.10.0.post2/numpy/core/src/multiarray/datetime_busday.c +1322 -0
  110. numpy-1.10.0.post2/numpy/core/src/multiarray/datetime_busdaycal.c +552 -0
  111. numpy-1.10.0.post2/numpy/core/src/multiarray/datetime_strings.c +1772 -0
  112. numpy-1.10.0.post2/numpy/core/src/multiarray/descriptor.c +3719 -0
  113. numpy-1.10.0.post2/numpy/core/src/multiarray/dtype_transfer.c +4239 -0
  114. numpy-1.10.0.post2/numpy/core/src/multiarray/einsum.c.src +3005 -0
  115. numpy-1.10.0.post2/numpy/core/src/multiarray/getset.c +986 -0
  116. numpy-1.10.0.post2/numpy/core/src/multiarray/hashdescr.c +318 -0
  117. numpy-1.10.0.post2/numpy/core/src/multiarray/item_selection.c +2413 -0
  118. numpy-1.10.0.post2/numpy/core/src/multiarray/iterators.c +2192 -0
  119. numpy-1.10.0.post2/numpy/core/src/multiarray/lowlevel_strided_loops.c.src +1769 -0
  120. numpy-1.10.0.post2/numpy/core/src/multiarray/mapping.c +3380 -0
  121. numpy-1.10.0.post2/numpy/core/src/multiarray/mapping.h +77 -0
  122. numpy-1.10.0.post2/numpy/core/src/multiarray/methods.c +2514 -0
  123. numpy-1.10.0.post2/numpy/core/src/multiarray/multiarray_tests.c.src +1035 -0
  124. numpy-1.10.0.post2/numpy/core/src/multiarray/multiarraymodule.c +4628 -0
  125. numpy-1.10.0.post2/numpy/core/src/multiarray/multiarraymodule.h +15 -0
  126. numpy-1.10.0.post2/numpy/core/src/multiarray/nditer_api.c +2809 -0
  127. numpy-1.10.0.post2/numpy/core/src/multiarray/nditer_constr.c +3160 -0
  128. numpy-1.10.0.post2/numpy/core/src/multiarray/nditer_pywrap.c +2499 -0
  129. numpy-1.10.0.post2/numpy/core/src/multiarray/number.c +1106 -0
  130. numpy-1.10.0.post2/numpy/core/src/multiarray/number.h +77 -0
  131. numpy-1.10.0.post2/numpy/core/src/multiarray/numpymemoryview.c +308 -0
  132. numpy-1.10.0.post2/numpy/core/src/multiarray/numpyos.c +683 -0
  133. numpy-1.10.0.post2/numpy/core/src/multiarray/scalarapi.c +870 -0
  134. numpy-1.10.0.post2/numpy/core/src/multiarray/scalartypes.c.src +4343 -0
  135. numpy-1.10.0.post2/numpy/core/src/multiarray/scalartypes.h +55 -0
  136. numpy-1.10.0.post2/numpy/core/src/multiarray/shape.c +1131 -0
  137. numpy-1.10.0.post2/numpy/core/src/multiarray/ucsnarrow.c +174 -0
  138. numpy-1.10.0.post2/numpy/core/src/multiarray/vdot.c +180 -0
  139. numpy-1.10.0.post2/numpy/core/src/multiarray/vdot.h +18 -0
  140. numpy-1.10.0.post2/numpy/core/src/npymath/ieee754.c.src +808 -0
  141. numpy-1.10.0.post2/numpy/core/src/npymath/npy_math.c.src +597 -0
  142. numpy-1.10.0.post2/numpy/core/src/npymath/npy_math_complex.c.src +1788 -0
  143. numpy-1.10.0.post2/numpy/core/src/npymath/npy_math_private.h +544 -0
  144. numpy-1.10.0.post2/numpy/core/src/npysort/heapsort.c.src +402 -0
  145. numpy-1.10.0.post2/numpy/core/src/npysort/mergesort.c.src +488 -0
  146. numpy-1.10.0.post2/numpy/core/src/npysort/npysort_common.h +360 -0
  147. numpy-1.10.0.post2/numpy/core/src/npysort/quicksort.c.src +523 -0
  148. numpy-1.10.0.post2/numpy/core/src/npysort/selection.c.src +426 -0
  149. numpy-1.10.0.post2/numpy/core/src/private/npy_cblas.h +584 -0
  150. numpy-1.10.0.post2/numpy/core/src/private/npy_config.h +101 -0
  151. numpy-1.10.0.post2/numpy/core/src/private/npy_import.h +32 -0
  152. numpy-1.10.0.post2/numpy/core/src/private/npy_partition.h.src +122 -0
  153. numpy-1.10.0.post2/numpy/core/src/private/npy_sort.h +196 -0
  154. numpy-1.10.0.post2/numpy/core/src/private/templ_common.h.src +43 -0
  155. numpy-1.10.0.post2/numpy/core/src/private/ufunc_override.h +397 -0
  156. numpy-1.10.0.post2/numpy/core/src/umath/funcs.inc.src +356 -0
  157. numpy-1.10.0.post2/numpy/core/src/umath/loops.c.src +2675 -0
  158. numpy-1.10.0.post2/numpy/core/src/umath/loops.h.src +497 -0
  159. numpy-1.10.0.post2/numpy/core/src/umath/operand_flag_tests.c.src +105 -0
  160. numpy-1.10.0.post2/numpy/core/src/umath/scalarmath.c.src +1738 -0
  161. numpy-1.10.0.post2/numpy/core/src/umath/simd.inc.src +903 -0
  162. numpy-1.10.0.post2/numpy/core/src/umath/test_rational.c.src +1404 -0
  163. numpy-1.10.0.post2/numpy/core/src/umath/ufunc_object.c +5703 -0
  164. numpy-1.10.0.post2/numpy/core/src/umath/ufunc_type_resolution.c +2159 -0
  165. numpy-1.10.0.post2/numpy/core/src/umath/umath_tests.c.src +392 -0
  166. numpy-1.10.0.post2/numpy/core/src/umath/umathmodule.c +443 -0
  167. numpy-1.10.0.post2/numpy/core/tests/test_abc.py +47 -0
  168. numpy-1.10.0.post2/numpy/core/tests/test_api.py +515 -0
  169. numpy-1.10.0.post2/numpy/core/tests/test_arrayprint.py +171 -0
  170. numpy-1.10.0.post2/numpy/core/tests/test_datetime.py +1820 -0
  171. numpy-1.10.0.post2/numpy/core/tests/test_defchararray.py +703 -0
  172. numpy-1.10.0.post2/numpy/core/tests/test_deprecations.py +619 -0
  173. numpy-1.10.0.post2/numpy/core/tests/test_dtype.py +578 -0
  174. numpy-1.10.0.post2/numpy/core/tests/test_einsum.py +627 -0
  175. numpy-1.10.0.post2/numpy/core/tests/test_errstate.py +52 -0
  176. numpy-1.10.0.post2/numpy/core/tests/test_function_base.py +142 -0
  177. numpy-1.10.0.post2/numpy/core/tests/test_getlimits.py +77 -0
  178. numpy-1.10.0.post2/numpy/core/tests/test_half.py +436 -0
  179. numpy-1.10.0.post2/numpy/core/tests/test_indexerrors.py +126 -0
  180. numpy-1.10.0.post2/numpy/core/tests/test_indexing.py +1047 -0
  181. numpy-1.10.0.post2/numpy/core/tests/test_item_selection.py +73 -0
  182. numpy-1.10.0.post2/numpy/core/tests/test_machar.py +29 -0
  183. numpy-1.10.0.post2/numpy/core/tests/test_memmap.py +130 -0
  184. numpy-1.10.0.post2/numpy/core/tests/test_multiarray.py +5924 -0
  185. numpy-1.10.0.post2/numpy/core/tests/test_multiarray_assignment.py +84 -0
  186. numpy-1.10.0.post2/numpy/core/tests/test_nditer.py +2638 -0
  187. numpy-1.10.0.post2/numpy/core/tests/test_numeric.py +2204 -0
  188. numpy-1.10.0.post2/numpy/core/tests/test_numerictypes.py +382 -0
  189. numpy-1.10.0.post2/numpy/core/tests/test_print.py +248 -0
  190. numpy-1.10.0.post2/numpy/core/tests/test_records.py +299 -0
  191. numpy-1.10.0.post2/numpy/core/tests/test_regression.py +2177 -0
  192. numpy-1.10.0.post2/numpy/core/tests/test_scalarinherit.py +41 -0
  193. numpy-1.10.0.post2/numpy/core/tests/test_scalarmath.py +316 -0
  194. numpy-1.10.0.post2/numpy/core/tests/test_shape_base.py +319 -0
  195. numpy-1.10.0.post2/numpy/core/tests/test_ufunc.py +1227 -0
  196. numpy-1.10.0.post2/numpy/core/tests/test_umath.py +1933 -0
  197. numpy-1.10.0.post2/numpy/core/tests/test_umath_complex.py +538 -0
  198. numpy-1.10.0.post2/numpy/core/tests/test_unicode.py +360 -0
  199. numpy-1.10.0.post2/numpy/distutils/__init__.py +23 -0
  200. numpy-1.10.0.post2/numpy/distutils/ccompiler.py +690 -0
  201. numpy-1.10.0.post2/numpy/distutils/command/autodist.py +94 -0
  202. numpy-1.10.0.post2/numpy/distutils/command/build.py +47 -0
  203. numpy-1.10.0.post2/numpy/distutils/command/build_clib.py +295 -0
  204. numpy-1.10.0.post2/numpy/distutils/command/build_ext.py +522 -0
  205. numpy-1.10.0.post2/numpy/distutils/command/config.py +437 -0
  206. numpy-1.10.0.post2/numpy/distutils/exec_command.py +651 -0
  207. numpy-1.10.0.post2/numpy/distutils/fcompiler/compaq.py +128 -0
  208. numpy-1.10.0.post2/numpy/distutils/fcompiler/gnu.py +403 -0
  209. numpy-1.10.0.post2/numpy/distutils/fcompiler/intel.py +217 -0
  210. numpy-1.10.0.post2/numpy/distutils/fcompiler/pg.py +63 -0
  211. numpy-1.10.0.post2/numpy/distutils/fcompiler/sun.py +55 -0
  212. numpy-1.10.0.post2/numpy/distutils/intelccompiler.py +95 -0
  213. numpy-1.10.0.post2/numpy/distutils/lib2def.py +116 -0
  214. numpy-1.10.0.post2/numpy/distutils/mingw32ccompiler.py +599 -0
  215. numpy-1.10.0.post2/numpy/distutils/misc_util.py +2306 -0
  216. numpy-1.10.0.post2/numpy/distutils/msvc9compiler.py +23 -0
  217. numpy-1.10.0.post2/numpy/distutils/msvccompiler.py +17 -0
  218. numpy-1.10.0.post2/numpy/distutils/npy_pkg_config.py +451 -0
  219. numpy-1.10.0.post2/numpy/distutils/system_info.py +2397 -0
  220. numpy-1.10.0.post2/numpy/distutils/tests/f2py_ext/tests/test_fib2.py +12 -0
  221. numpy-1.10.0.post2/numpy/distutils/tests/f2py_f90_ext/tests/test_foo.py +11 -0
  222. numpy-1.10.0.post2/numpy/distutils/tests/gen_ext/tests/test_fib3.py +11 -0
  223. numpy-1.10.0.post2/numpy/distutils/tests/pyrex_ext/tests/test_primes.py +13 -0
  224. numpy-1.10.0.post2/numpy/distutils/tests/swig_ext/__init__.py +1 -0
  225. numpy-1.10.0.post2/numpy/distutils/tests/swig_ext/tests/test_example.py +17 -0
  226. numpy-1.10.0.post2/numpy/distutils/tests/swig_ext/tests/test_example2.py +15 -0
  227. numpy-1.10.0.post2/numpy/distutils/tests/test_fcompiler_gnu.py +60 -0
  228. numpy-1.10.0.post2/numpy/distutils/tests/test_fcompiler_intel.py +36 -0
  229. numpy-1.10.0.post2/numpy/distutils/tests/test_misc_util.py +79 -0
  230. numpy-1.10.0.post2/numpy/distutils/tests/test_npy_pkg_config.py +102 -0
  231. numpy-1.10.0.post2/numpy/distutils/tests/test_system_info.py +209 -0
  232. numpy-1.10.0.post2/numpy/distutils/unixccompiler.py +125 -0
  233. numpy-1.10.0.post2/numpy/doc/byteswapping.py +156 -0
  234. numpy-1.10.0.post2/numpy/doc/creation.py +144 -0
  235. numpy-1.10.0.post2/numpy/doc/glossary.py +423 -0
  236. numpy-1.10.0.post2/numpy/doc/indexing.py +439 -0
  237. numpy-1.10.0.post2/numpy/doc/structured_arrays.py +290 -0
  238. numpy-1.10.0.post2/numpy/f2py/__init__.py +49 -0
  239. numpy-1.10.0.post2/numpy/f2py/__main__.py +25 -0
  240. numpy-1.10.0.post2/numpy/f2py/auxfuncs.py +858 -0
  241. numpy-1.10.0.post2/numpy/f2py/capi_maps.py +851 -0
  242. numpy-1.10.0.post2/numpy/f2py/cb_rules.py +554 -0
  243. numpy-1.10.0.post2/numpy/f2py/cfuncs.py +1261 -0
  244. numpy-1.10.0.post2/numpy/f2py/common_rules.py +150 -0
  245. numpy-1.10.0.post2/numpy/f2py/crackfortran.py +3314 -0
  246. numpy-1.10.0.post2/numpy/f2py/diagnose.py +156 -0
  247. numpy-1.10.0.post2/numpy/f2py/f2py2e.py +656 -0
  248. numpy-1.10.0.post2/numpy/f2py/f2py_testing.py +48 -0
  249. numpy-1.10.0.post2/numpy/f2py/f90mod_rules.py +272 -0
  250. numpy-1.10.0.post2/numpy/f2py/func2subr.py +299 -0
  251. numpy-1.10.0.post2/numpy/f2py/rules.py +1475 -0
  252. numpy-1.10.0.post2/numpy/f2py/setup.py +117 -0
  253. numpy-1.10.0.post2/numpy/f2py/src/fortranobject.c +1037 -0
  254. numpy-1.10.0.post2/numpy/f2py/src/fortranobject.h +162 -0
  255. numpy-1.10.0.post2/numpy/f2py/tests/src/array_from_pyobj/wrapmodule.c +223 -0
  256. numpy-1.10.0.post2/numpy/f2py/tests/test_array_from_pyobj.py +593 -0
  257. numpy-1.10.0.post2/numpy/f2py/tests/test_assumed_shape.py +35 -0
  258. numpy-1.10.0.post2/numpy/f2py/tests/test_callback.py +136 -0
  259. numpy-1.10.0.post2/numpy/f2py/tests/test_kind.py +36 -0
  260. numpy-1.10.0.post2/numpy/f2py/tests/test_mixed.py +40 -0
  261. numpy-1.10.0.post2/numpy/f2py/tests/test_regression.py +34 -0
  262. numpy-1.10.0.post2/numpy/f2py/tests/test_return_character.py +148 -0
  263. numpy-1.10.0.post2/numpy/f2py/tests/test_return_complex.py +170 -0
  264. numpy-1.10.0.post2/numpy/f2py/tests/test_return_integer.py +180 -0
  265. numpy-1.10.0.post2/numpy/f2py/tests/test_return_logical.py +189 -0
  266. numpy-1.10.0.post2/numpy/f2py/tests/test_return_real.py +206 -0
  267. numpy-1.10.0.post2/numpy/f2py/tests/test_size.py +44 -0
  268. numpy-1.10.0.post2/numpy/f2py/tests/util.py +367 -0
  269. numpy-1.10.0.post2/numpy/f2py/use_rules.py +115 -0
  270. numpy-1.10.0.post2/numpy/fft/fftpack.c +1501 -0
  271. numpy-1.10.0.post2/numpy/fft/fftpack.h +28 -0
  272. numpy-1.10.0.post2/numpy/fft/fftpack.py +1241 -0
  273. numpy-1.10.0.post2/numpy/fft/fftpack_litemodule.c +363 -0
  274. numpy-1.10.0.post2/numpy/fft/info.py +187 -0
  275. numpy-1.10.0.post2/numpy/fft/setup.py +19 -0
  276. numpy-1.10.0.post2/numpy/fft/tests/test_fftpack.py +166 -0
  277. numpy-1.10.0.post2/numpy/fft/tests/test_helper.py +78 -0
  278. numpy-1.10.0.post2/numpy/lib/_iotools.py +917 -0
  279. numpy-1.10.0.post2/numpy/lib/arraypad.py +1497 -0
  280. numpy-1.10.0.post2/numpy/lib/arraysetops.py +480 -0
  281. numpy-1.10.0.post2/numpy/lib/arrayterator.py +226 -0
  282. numpy-1.10.0.post2/numpy/lib/financial.py +737 -0
  283. numpy-1.10.0.post2/numpy/lib/format.py +814 -0
  284. numpy-1.10.0.post2/numpy/lib/function_base.py +4150 -0
  285. numpy-1.10.0.post2/numpy/lib/index_tricks.py +874 -0
  286. numpy-1.10.0.post2/numpy/lib/info.py +152 -0
  287. numpy-1.10.0.post2/numpy/lib/nanfunctions.py +1237 -0
  288. numpy-1.10.0.post2/numpy/lib/npyio.py +1992 -0
  289. numpy-1.10.0.post2/numpy/lib/polynomial.py +1277 -0
  290. numpy-1.10.0.post2/numpy/lib/recfunctions.py +1003 -0
  291. numpy-1.10.0.post2/numpy/lib/setup.py +12 -0
  292. numpy-1.10.0.post2/numpy/lib/shape_base.py +872 -0
  293. numpy-1.10.0.post2/numpy/lib/stride_tricks.py +200 -0
  294. numpy-1.10.0.post2/numpy/lib/tests/data/py2-objarr.npy +0 -0
  295. numpy-1.10.0.post2/numpy/lib/tests/data/py2-objarr.npz +0 -0
  296. numpy-1.10.0.post2/numpy/lib/tests/data/py3-objarr.npy +0 -0
  297. numpy-1.10.0.post2/numpy/lib/tests/data/py3-objarr.npz +0 -0
  298. numpy-1.10.0.post2/numpy/lib/tests/test__iotools.py +348 -0
  299. numpy-1.10.0.post2/numpy/lib/tests/test__version.py +70 -0
  300. numpy-1.10.0.post2/numpy/lib/tests/test_arraypad.py +1047 -0
  301. numpy-1.10.0.post2/numpy/lib/tests/test_arraysetops.py +309 -0
  302. numpy-1.10.0.post2/numpy/lib/tests/test_financial.py +163 -0
  303. numpy-1.10.0.post2/numpy/lib/tests/test_format.py +841 -0
  304. numpy-1.10.0.post2/numpy/lib/tests/test_function_base.py +2555 -0
  305. numpy-1.10.0.post2/numpy/lib/tests/test_index_tricks.py +326 -0
  306. numpy-1.10.0.post2/numpy/lib/tests/test_io.py +1916 -0
  307. numpy-1.10.0.post2/numpy/lib/tests/test_nanfunctions.py +707 -0
  308. numpy-1.10.0.post2/numpy/lib/tests/test_packbits.py +26 -0
  309. numpy-1.10.0.post2/numpy/lib/tests/test_polynomial.py +188 -0
  310. numpy-1.10.0.post2/numpy/lib/tests/test_recfunctions.py +734 -0
  311. numpy-1.10.0.post2/numpy/lib/tests/test_shape_base.py +386 -0
  312. numpy-1.10.0.post2/numpy/lib/tests/test_stride_tricks.py +405 -0
  313. numpy-1.10.0.post2/numpy/lib/tests/test_twodim_base.py +535 -0
  314. numpy-1.10.0.post2/numpy/lib/tests/test_type_check.py +332 -0
  315. numpy-1.10.0.post2/numpy/lib/twodim_base.py +1007 -0
  316. numpy-1.10.0.post2/numpy/lib/type_check.py +596 -0
  317. numpy-1.10.0.post2/numpy/lib/utils.py +1122 -0
  318. numpy-1.10.0.post2/numpy/linalg/lapack_lite/python_xerbla.c +46 -0
  319. numpy-1.10.0.post2/numpy/linalg/lapack_litemodule.c +358 -0
  320. numpy-1.10.0.post2/numpy/linalg/linalg.py +2406 -0
  321. numpy-1.10.0.post2/numpy/linalg/tests/test_build.py +59 -0
  322. numpy-1.10.0.post2/numpy/linalg/tests/test_linalg.py +1351 -0
  323. numpy-1.10.0.post2/numpy/linalg/tests/test_regression.py +95 -0
  324. numpy-1.10.0.post2/numpy/linalg/umath_linalg.c.src +3236 -0
  325. numpy-1.10.0.post2/numpy/ma/__init__.py +56 -0
  326. numpy-1.10.0.post2/numpy/ma/bench.py +131 -0
  327. numpy-1.10.0.post2/numpy/ma/core.py +7608 -0
  328. numpy-1.10.0.post2/numpy/ma/extras.py +1953 -0
  329. numpy-1.10.0.post2/numpy/ma/mrecords.py +796 -0
  330. numpy-1.10.0.post2/numpy/ma/setup.py +13 -0
  331. numpy-1.10.0.post2/numpy/ma/tests/test_core.py +4100 -0
  332. numpy-1.10.0.post2/numpy/ma/tests/test_extras.py +1132 -0
  333. numpy-1.10.0.post2/numpy/ma/tests/test_mrecords.py +520 -0
  334. numpy-1.10.0.post2/numpy/ma/tests/test_old_ma.py +879 -0
  335. numpy-1.10.0.post2/numpy/ma/tests/test_regression.py +80 -0
  336. numpy-1.10.0.post2/numpy/ma/tests/test_subclassing.py +338 -0
  337. numpy-1.10.0.post2/numpy/ma/testutils.py +289 -0
  338. numpy-1.10.0.post2/numpy/ma/timer_comparison.py +440 -0
  339. numpy-1.10.0.post2/numpy/matlib.py +358 -0
  340. numpy-1.10.0.post2/numpy/matrixlib/defmatrix.py +1232 -0
  341. numpy-1.10.0.post2/numpy/matrixlib/tests/test_defmatrix.py +449 -0
  342. numpy-1.10.0.post2/numpy/matrixlib/tests/test_multiarray.py +23 -0
  343. numpy-1.10.0.post2/numpy/matrixlib/tests/test_numeric.py +23 -0
  344. numpy-1.10.0.post2/numpy/matrixlib/tests/test_regression.py +37 -0
  345. numpy-1.10.0.post2/numpy/polynomial/_polybase.py +962 -0
  346. numpy-1.10.0.post2/numpy/polynomial/chebyshev.py +2056 -0
  347. numpy-1.10.0.post2/numpy/polynomial/hermite.py +1831 -0
  348. numpy-1.10.0.post2/numpy/polynomial/hermite_e.py +1828 -0
  349. numpy-1.10.0.post2/numpy/polynomial/laguerre.py +1780 -0
  350. numpy-1.10.0.post2/numpy/polynomial/legendre.py +1808 -0
  351. numpy-1.10.0.post2/numpy/polynomial/polyutils.py +403 -0
  352. numpy-1.10.0.post2/numpy/random/mtrand/distributions.c +912 -0
  353. numpy-1.10.0.post2/numpy/random/mtrand/mtrand.c +34805 -0
  354. numpy-1.10.0.post2/numpy/random/mtrand/mtrand.pyx +4766 -0
  355. numpy-1.10.0.post2/numpy/random/setup.py +61 -0
  356. numpy-1.10.0.post2/numpy/random/tests/test_random.py +723 -0
  357. numpy-1.10.0.post2/numpy/random/tests/test_regression.py +117 -0
  358. numpy-1.10.0.post2/numpy/setup.py +29 -0
  359. numpy-1.10.0.post2/numpy/testing/__init__.py +15 -0
  360. numpy-1.10.0.post2/numpy/testing/decorators.py +271 -0
  361. numpy-1.10.0.post2/numpy/testing/noseclasses.py +353 -0
  362. numpy-1.10.0.post2/numpy/testing/nosetester.py +511 -0
  363. numpy-1.10.0.post2/numpy/testing/print_coercion_tables.py +91 -0
  364. numpy-1.10.0.post2/numpy/testing/setup.py +20 -0
  365. numpy-1.10.0.post2/numpy/testing/tests/test_decorators.py +182 -0
  366. numpy-1.10.0.post2/numpy/testing/tests/test_utils.py +781 -0
  367. numpy-1.10.0.post2/numpy/testing/utils.py +1831 -0
  368. numpy-1.10.0.post2/numpy/tests/test_ctypeslib.py +106 -0
  369. numpy-1.10.0.post2/numpy/tests/test_matlib.py +55 -0
  370. numpy-1.10.0.post2/numpy/tests/test_scripts.py +69 -0
  371. numpy-1.10.0.post2/numpy/version.py +10 -0
  372. numpy-1.10.0.post2/setup.py +260 -0
  373. numpy-1.10.0.post2/site.cfg.example +193 -0
  374. numpy-1.10.0.post2/tmp.txt +789 -0
  375. numpy-1.10.0.post2/tools/swig/README +145 -0
  376. numpy-1.10.0.post2/tools/swig/numpy.i +3161 -0
  377. numpy-1.10.0.post2/tools/swig/test/Array.i +135 -0
  378. numpy-1.10.0.post2/tools/swig/test/ArrayZ.cxx +131 -0
  379. numpy-1.10.0.post2/tools/swig/test/ArrayZ.h +56 -0
  380. numpy-1.10.0.post2/tools/swig/test/Flat.cxx +36 -0
  381. numpy-1.10.0.post2/tools/swig/test/Flat.h +34 -0
  382. numpy-1.10.0.post2/tools/swig/test/Flat.i +36 -0
  383. numpy-1.10.0.post2/tools/swig/test/Makefile +37 -0
  384. numpy-1.10.0.post2/tools/swig/test/setup.py +71 -0
  385. numpy-1.10.0.post2/tools/swig/test/testArray.py +385 -0
  386. numpy-1.10.0.post2/tools/swig/test/testFarray.py +159 -0
  387. numpy-1.10.0.post2/tools/swig/test/testFlat.py +200 -0
  388. numpy-1.10.0.post2/tools/swig/test/testFortran.py +173 -0
  389. numpy-1.10.0.post2/tools/swig/test/testMatrix.py +362 -0
  390. numpy-1.10.0.post2/tools/swig/test/testSuperTensor.py +388 -0
  391. numpy-1.10.0.post2/tools/swig/test/testTensor.py +402 -0
  392. numpy-1.10.0.post2/tools/swig/test/testVector.py +381 -0
  393. numpy-1.9.2/INSTALL.txt +0 -138
  394. numpy-1.9.2/LICENSE.txt +0 -30
  395. numpy-1.9.2/MANIFEST.in +0 -26
  396. numpy-1.9.2/PKG-INFO +0 -39
  397. numpy-1.9.2/doc/scipy-sphinx-theme/.git +0 -1
  398. numpy-1.9.2/doc/source/conf.py +0 -331
  399. numpy-1.9.2/doc/source/dev/gitwash/branch_list.png +0 -0
  400. numpy-1.9.2/doc/source/dev/gitwash/branch_list_compare.png +0 -0
  401. numpy-1.9.2/doc/source/dev/gitwash/development_workflow.rst +0 -568
  402. numpy-1.9.2/doc/source/dev/gitwash/git_links.inc +0 -88
  403. numpy-1.9.2/doc/source/dev/gitwash/index.rst +0 -14
  404. numpy-1.9.2/doc/source/dev/index.rst +0 -10
  405. numpy-1.9.2/doc/source/reference/arrays.classes.rst +0 -427
  406. numpy-1.9.2/doc/source/reference/arrays.dtypes.rst +0 -534
  407. numpy-1.9.2/doc/source/reference/arrays.indexing.rst +0 -550
  408. numpy-1.9.2/doc/source/reference/arrays.interface.rst +0 -336
  409. numpy-1.9.2/doc/source/reference/arrays.ndarray.rst +0 -609
  410. numpy-1.9.2/doc/source/reference/arrays.scalars.rst +0 -291
  411. numpy-1.9.2/doc/source/reference/c-api.array.rst +0 -3362
  412. numpy-1.9.2/doc/source/reference/c-api.config.rst +0 -103
  413. numpy-1.9.2/doc/source/reference/c-api.coremath.rst +0 -420
  414. numpy-1.9.2/doc/source/reference/c-api.dtype.rst +0 -376
  415. numpy-1.9.2/doc/source/reference/c-api.generalized-ufuncs.rst +0 -171
  416. numpy-1.9.2/doc/source/reference/c-api.iterator.rst +0 -1298
  417. numpy-1.9.2/doc/source/reference/c-api.types-and-structures.rst +0 -1204
  418. numpy-1.9.2/doc/source/reference/c-api.ufunc.rst +0 -399
  419. numpy-1.9.2/doc/source/reference/index.rst +0 -44
  420. numpy-1.9.2/doc/source/reference/internals.code-explanations.rst +0 -666
  421. numpy-1.9.2/doc/source/reference/routines.array-manipulation.rst +0 -113
  422. numpy-1.9.2/doc/source/reference/routines.io.rst +0 -74
  423. numpy-1.9.2/doc/source/reference/routines.linalg.rst +0 -88
  424. numpy-1.9.2/doc/source/reference/routines.ma.rst +0 -405
  425. numpy-1.9.2/doc/source/reference/routines.sort.rst +0 -42
  426. numpy-1.9.2/doc/source/reference/routines.statistics.rst +0 -55
  427. numpy-1.9.2/doc/source/reference/swig.interface-file.rst +0 -1055
  428. numpy-1.9.2/doc/source/reference/swig.testing.rst +0 -166
  429. numpy-1.9.2/doc/source/reference/ufuncs.rst +0 -651
  430. numpy-1.9.2/doc/source/release.rst +0 -19
  431. numpy-1.9.2/doc/source/user/basics.io.genfromtxt.rst +0 -531
  432. numpy-1.9.2/doc/source/user/basics.rec.rst +0 -7
  433. numpy-1.9.2/doc/source/user/c-info.beyond-basics.rst +0 -560
  434. numpy-1.9.2/doc/source/user/c-info.how-to-extend.rst +0 -642
  435. numpy-1.9.2/doc/source/user/c-info.python-as-glue.rst +0 -1528
  436. numpy-1.9.2/doc/source/user/c-info.ufunc-tutorial.rst +0 -1211
  437. numpy-1.9.2/doc/source/user/install.rst +0 -180
  438. numpy-1.9.2/doc/sphinxext/.git +0 -1
  439. numpy-1.9.2/numpy/__init__.py +0 -216
  440. numpy-1.9.2/numpy/_import_tools.py +0 -348
  441. numpy-1.9.2/numpy/add_newdocs.py +0 -7518
  442. numpy-1.9.2/numpy/compat/_inspect.py +0 -221
  443. numpy-1.9.2/numpy/compat/py3k.py +0 -89
  444. numpy-1.9.2/numpy/compat/setup.py +0 -12
  445. numpy-1.9.2/numpy/core/__init__.py +0 -78
  446. numpy-1.9.2/numpy/core/_internal.py +0 -570
  447. numpy-1.9.2/numpy/core/_methods.py +0 -134
  448. numpy-1.9.2/numpy/core/arrayprint.py +0 -752
  449. numpy-1.9.2/numpy/core/blasdot/_dotblas.c +0 -1255
  450. numpy-1.9.2/numpy/core/blasdot/apple_sgemv_patch.c +0 -216
  451. numpy-1.9.2/numpy/core/blasdot/cblas.h +0 -578
  452. numpy-1.9.2/numpy/core/code_generators/cversions.txt +0 -31
  453. numpy-1.9.2/numpy/core/code_generators/generate_ufunc_api.py +0 -219
  454. numpy-1.9.2/numpy/core/code_generators/generate_umath.py +0 -972
  455. numpy-1.9.2/numpy/core/code_generators/numpy_api.py +0 -412
  456. numpy-1.9.2/numpy/core/code_generators/ufunc_docstrings.py +0 -3419
  457. numpy-1.9.2/numpy/core/defchararray.py +0 -2687
  458. numpy-1.9.2/numpy/core/fromnumeric.py +0 -2938
  459. numpy-1.9.2/numpy/core/function_base.py +0 -190
  460. numpy-1.9.2/numpy/core/getlimits.py +0 -306
  461. numpy-1.9.2/numpy/core/include/numpy/fenv/fenv.c +0 -38
  462. numpy-1.9.2/numpy/core/include/numpy/fenv/fenv.h +0 -224
  463. numpy-1.9.2/numpy/core/include/numpy/ndarrayobject.h +0 -237
  464. numpy-1.9.2/numpy/core/include/numpy/ndarraytypes.h +0 -1820
  465. numpy-1.9.2/numpy/core/include/numpy/npy_3kcompat.h +0 -506
  466. numpy-1.9.2/numpy/core/include/numpy/npy_common.h +0 -1038
  467. numpy-1.9.2/numpy/core/include/numpy/npy_cpu.h +0 -122
  468. numpy-1.9.2/numpy/core/include/numpy/npy_endian.h +0 -49
  469. numpy-1.9.2/numpy/core/include/numpy/npy_math.h +0 -479
  470. numpy-1.9.2/numpy/core/include/numpy/numpyconfig.h +0 -35
  471. numpy-1.9.2/numpy/core/machar.py +0 -338
  472. numpy-1.9.2/numpy/core/memmap.py +0 -308
  473. numpy-1.9.2/numpy/core/numeric.py +0 -2842
  474. numpy-1.9.2/numpy/core/numerictypes.py +0 -1042
  475. numpy-1.9.2/numpy/core/records.py +0 -804
  476. numpy-1.9.2/numpy/core/setup.py +0 -1016
  477. numpy-1.9.2/numpy/core/setup_common.py +0 -321
  478. numpy-1.9.2/numpy/core/shape_base.py +0 -277
  479. numpy-1.9.2/numpy/core/src/multiarray/alloc.c +0 -241
  480. numpy-1.9.2/numpy/core/src/multiarray/arrayobject.c +0 -1791
  481. numpy-1.9.2/numpy/core/src/multiarray/arraytypes.c.src +0 -4372
  482. numpy-1.9.2/numpy/core/src/multiarray/arraytypes.h +0 -13
  483. numpy-1.9.2/numpy/core/src/multiarray/buffer.c +0 -954
  484. numpy-1.9.2/numpy/core/src/multiarray/calculation.c +0 -1229
  485. numpy-1.9.2/numpy/core/src/multiarray/common.c +0 -798
  486. numpy-1.9.2/numpy/core/src/multiarray/common.h +0 -328
  487. numpy-1.9.2/numpy/core/src/multiarray/conversion_utils.c +0 -1240
  488. numpy-1.9.2/numpy/core/src/multiarray/convert.c +0 -589
  489. numpy-1.9.2/numpy/core/src/multiarray/convert_datatype.c +0 -2199
  490. numpy-1.9.2/numpy/core/src/multiarray/ctors.c +0 -3785
  491. numpy-1.9.2/numpy/core/src/multiarray/datetime.c +0 -3823
  492. numpy-1.9.2/numpy/core/src/multiarray/datetime_busday.c +0 -1322
  493. numpy-1.9.2/numpy/core/src/multiarray/datetime_busdaycal.c +0 -552
  494. numpy-1.9.2/numpy/core/src/multiarray/datetime_strings.c +0 -1772
  495. numpy-1.9.2/numpy/core/src/multiarray/descriptor.c +0 -3658
  496. numpy-1.9.2/numpy/core/src/multiarray/dtype_transfer.c +0 -4232
  497. numpy-1.9.2/numpy/core/src/multiarray/einsum.c.src +0 -3013
  498. numpy-1.9.2/numpy/core/src/multiarray/getset.c +0 -984
  499. numpy-1.9.2/numpy/core/src/multiarray/hashdescr.c +0 -319
  500. numpy-1.9.2/numpy/core/src/multiarray/item_selection.c +0 -2711
  501. numpy-1.9.2/numpy/core/src/multiarray/iterators.c +0 -2160
  502. numpy-1.9.2/numpy/core/src/multiarray/lowlevel_strided_loops.c.src +0 -1767
  503. numpy-1.9.2/numpy/core/src/multiarray/mapping.c +0 -3316
  504. numpy-1.9.2/numpy/core/src/multiarray/mapping.h +0 -73
  505. numpy-1.9.2/numpy/core/src/multiarray/methods.c +0 -2497
  506. numpy-1.9.2/numpy/core/src/multiarray/multiarray_tests.c.src +0 -977
  507. numpy-1.9.2/numpy/core/src/multiarray/multiarraymodule.c +0 -4202
  508. numpy-1.9.2/numpy/core/src/multiarray/multiarraymodule.h +0 -4
  509. numpy-1.9.2/numpy/core/src/multiarray/multiarraymodule_onefile.c +0 -58
  510. numpy-1.9.2/numpy/core/src/multiarray/nditer_api.c +0 -2809
  511. numpy-1.9.2/numpy/core/src/multiarray/nditer_constr.c +0 -3159
  512. numpy-1.9.2/numpy/core/src/multiarray/nditer_pywrap.c +0 -2492
  513. numpy-1.9.2/numpy/core/src/multiarray/number.c +0 -1057
  514. numpy-1.9.2/numpy/core/src/multiarray/number.h +0 -76
  515. numpy-1.9.2/numpy/core/src/multiarray/numpymemoryview.c +0 -309
  516. numpy-1.9.2/numpy/core/src/multiarray/numpyos.c +0 -683
  517. numpy-1.9.2/numpy/core/src/multiarray/scalarapi.c +0 -861
  518. numpy-1.9.2/numpy/core/src/multiarray/scalartypes.c.src +0 -4270
  519. numpy-1.9.2/numpy/core/src/multiarray/scalartypes.h +0 -52
  520. numpy-1.9.2/numpy/core/src/multiarray/shape.c +0 -1141
  521. numpy-1.9.2/numpy/core/src/multiarray/ucsnarrow.c +0 -173
  522. numpy-1.9.2/numpy/core/src/npymath/ieee754.c.src +0 -814
  523. numpy-1.9.2/numpy/core/src/npymath/npy_math.c.src +0 -527
  524. numpy-1.9.2/numpy/core/src/npymath/npy_math_complex.c.src +0 -291
  525. numpy-1.9.2/numpy/core/src/npymath/npy_math_private.h +0 -539
  526. numpy-1.9.2/numpy/core/src/npysort/heapsort.c.src +0 -341
  527. numpy-1.9.2/numpy/core/src/npysort/mergesort.c.src +0 -428
  528. numpy-1.9.2/numpy/core/src/npysort/npysort_common.h +0 -367
  529. numpy-1.9.2/numpy/core/src/npysort/quicksort.c.src +0 -363
  530. numpy-1.9.2/numpy/core/src/npysort/selection.c.src +0 -474
  531. numpy-1.9.2/numpy/core/src/private/npy_config.h +0 -44
  532. numpy-1.9.2/numpy/core/src/private/npy_partition.h.src +0 -138
  533. numpy-1.9.2/numpy/core/src/private/npy_sort.h +0 -194
  534. numpy-1.9.2/numpy/core/src/private/scalarmathmodule.h.src +0 -42
  535. numpy-1.9.2/numpy/core/src/private/ufunc_override.h +0 -384
  536. numpy-1.9.2/numpy/core/src/scalarmathmodule.c.src +0 -1980
  537. numpy-1.9.2/numpy/core/src/umath/funcs.inc.src +0 -715
  538. numpy-1.9.2/numpy/core/src/umath/loops.c.src +0 -2654
  539. numpy-1.9.2/numpy/core/src/umath/loops.h.src +0 -501
  540. numpy-1.9.2/numpy/core/src/umath/operand_flag_tests.c.src +0 -105
  541. numpy-1.9.2/numpy/core/src/umath/simd.inc.src +0 -881
  542. numpy-1.9.2/numpy/core/src/umath/test_rational.c.src +0 -1404
  543. numpy-1.9.2/numpy/core/src/umath/ufunc_object.c +0 -5520
  544. numpy-1.9.2/numpy/core/src/umath/ufunc_type_resolution.c +0 -2164
  545. numpy-1.9.2/numpy/core/src/umath/umath_tests.c.src +0 -341
  546. numpy-1.9.2/numpy/core/src/umath/umathmodule.c +0 -561
  547. numpy-1.9.2/numpy/core/src/umath/umathmodule_onefile.c +0 -6
  548. numpy-1.9.2/numpy/core/tests/test_abc.py +0 -45
  549. numpy-1.9.2/numpy/core/tests/test_api.py +0 -514
  550. numpy-1.9.2/numpy/core/tests/test_arrayprint.py +0 -167
  551. numpy-1.9.2/numpy/core/tests/test_blasdot.py +0 -249
  552. numpy-1.9.2/numpy/core/tests/test_datetime.py +0 -1781
  553. numpy-1.9.2/numpy/core/tests/test_defchararray.py +0 -642
  554. numpy-1.9.2/numpy/core/tests/test_deprecations.py +0 -512
  555. numpy-1.9.2/numpy/core/tests/test_dtype.py +0 -542
  556. numpy-1.9.2/numpy/core/tests/test_einsum.py +0 -583
  557. numpy-1.9.2/numpy/core/tests/test_errstate.py +0 -51
  558. numpy-1.9.2/numpy/core/tests/test_function_base.py +0 -111
  559. numpy-1.9.2/numpy/core/tests/test_getlimits.py +0 -86
  560. numpy-1.9.2/numpy/core/tests/test_half.py +0 -439
  561. numpy-1.9.2/numpy/core/tests/test_indexerrors.py +0 -127
  562. numpy-1.9.2/numpy/core/tests/test_indexing.py +0 -1014
  563. numpy-1.9.2/numpy/core/tests/test_item_selection.py +0 -70
  564. numpy-1.9.2/numpy/core/tests/test_machar.py +0 -30
  565. numpy-1.9.2/numpy/core/tests/test_memmap.py +0 -127
  566. numpy-1.9.2/numpy/core/tests/test_multiarray.py +0 -4645
  567. numpy-1.9.2/numpy/core/tests/test_multiarray_assignment.py +0 -80
  568. numpy-1.9.2/numpy/core/tests/test_nditer.py +0 -2630
  569. numpy-1.9.2/numpy/core/tests/test_numeric.py +0 -2117
  570. numpy-1.9.2/numpy/core/tests/test_numerictypes.py +0 -377
  571. numpy-1.9.2/numpy/core/tests/test_print.py +0 -245
  572. numpy-1.9.2/numpy/core/tests/test_records.py +0 -185
  573. numpy-1.9.2/numpy/core/tests/test_regression.py +0 -2108
  574. numpy-1.9.2/numpy/core/tests/test_scalarinherit.py +0 -34
  575. numpy-1.9.2/numpy/core/tests/test_scalarmath.py +0 -275
  576. numpy-1.9.2/numpy/core/tests/test_shape_base.py +0 -250
  577. numpy-1.9.2/numpy/core/tests/test_ufunc.py +0 -1153
  578. numpy-1.9.2/numpy/core/tests/test_umath.py +0 -1695
  579. numpy-1.9.2/numpy/core/tests/test_umath_complex.py +0 -537
  580. numpy-1.9.2/numpy/core/tests/test_unicode.py +0 -357
  581. numpy-1.9.2/numpy/distutils/__init__.py +0 -39
  582. numpy-1.9.2/numpy/distutils/ccompiler.py +0 -656
  583. numpy-1.9.2/numpy/distutils/command/autodist.py +0 -43
  584. numpy-1.9.2/numpy/distutils/command/build.py +0 -39
  585. numpy-1.9.2/numpy/distutils/command/build_clib.py +0 -284
  586. numpy-1.9.2/numpy/distutils/command/build_ext.py +0 -503
  587. numpy-1.9.2/numpy/distutils/command/config.py +0 -476
  588. numpy-1.9.2/numpy/distutils/exec_command.py +0 -618
  589. numpy-1.9.2/numpy/distutils/fcompiler/compaq.py +0 -128
  590. numpy-1.9.2/numpy/distutils/fcompiler/gnu.py +0 -390
  591. numpy-1.9.2/numpy/distutils/fcompiler/intel.py +0 -205
  592. numpy-1.9.2/numpy/distutils/fcompiler/pg.py +0 -60
  593. numpy-1.9.2/numpy/distutils/fcompiler/sun.py +0 -52
  594. numpy-1.9.2/numpy/distutils/intelccompiler.py +0 -45
  595. numpy-1.9.2/numpy/distutils/lib2def.py +0 -116
  596. numpy-1.9.2/numpy/distutils/mingw32ccompiler.py +0 -582
  597. numpy-1.9.2/numpy/distutils/misc_util.py +0 -2271
  598. numpy-1.9.2/numpy/distutils/npy_pkg_config.py +0 -464
  599. numpy-1.9.2/numpy/distutils/system_info.py +0 -2319
  600. numpy-1.9.2/numpy/distutils/tests/f2py_ext/tests/test_fib2.py +0 -13
  601. numpy-1.9.2/numpy/distutils/tests/f2py_f90_ext/tests/test_foo.py +0 -12
  602. numpy-1.9.2/numpy/distutils/tests/gen_ext/tests/test_fib3.py +0 -12
  603. numpy-1.9.2/numpy/distutils/tests/pyrex_ext/tests/test_primes.py +0 -14
  604. numpy-1.9.2/numpy/distutils/tests/swig_ext/tests/test_example.py +0 -18
  605. numpy-1.9.2/numpy/distutils/tests/swig_ext/tests/test_example2.py +0 -16
  606. numpy-1.9.2/numpy/distutils/tests/test_fcompiler_gnu.py +0 -53
  607. numpy-1.9.2/numpy/distutils/tests/test_fcompiler_intel.py +0 -36
  608. numpy-1.9.2/numpy/distutils/tests/test_misc_util.py +0 -75
  609. numpy-1.9.2/numpy/distutils/tests/test_npy_pkg_config.py +0 -98
  610. numpy-1.9.2/numpy/distutils/unixccompiler.py +0 -113
  611. numpy-1.9.2/numpy/doc/byteswapping.py +0 -147
  612. numpy-1.9.2/numpy/doc/creation.py +0 -144
  613. numpy-1.9.2/numpy/doc/glossary.py +0 -418
  614. numpy-1.9.2/numpy/doc/indexing.py +0 -437
  615. numpy-1.9.2/numpy/doc/structured_arrays.py +0 -223
  616. numpy-1.9.2/numpy/f2py/__init__.py +0 -49
  617. numpy-1.9.2/numpy/f2py/auxfuncs.py +0 -711
  618. numpy-1.9.2/numpy/f2py/capi_maps.py +0 -773
  619. numpy-1.9.2/numpy/f2py/cb_rules.py +0 -539
  620. numpy-1.9.2/numpy/f2py/cfuncs.py +0 -1224
  621. numpy-1.9.2/numpy/f2py/common_rules.py +0 -132
  622. numpy-1.9.2/numpy/f2py/crackfortran.py +0 -2870
  623. numpy-1.9.2/numpy/f2py/diagnose.py +0 -149
  624. numpy-1.9.2/numpy/f2py/f2py2e.py +0 -598
  625. numpy-1.9.2/numpy/f2py/f2py_testing.py +0 -46
  626. numpy-1.9.2/numpy/f2py/f90mod_rules.py +0 -246
  627. numpy-1.9.2/numpy/f2py/func2subr.py +0 -291
  628. numpy-1.9.2/numpy/f2py/rules.py +0 -1448
  629. numpy-1.9.2/numpy/f2py/setup.py +0 -129
  630. numpy-1.9.2/numpy/f2py/src/fortranobject.c +0 -972
  631. numpy-1.9.2/numpy/f2py/src/fortranobject.h +0 -162
  632. numpy-1.9.2/numpy/f2py/tests/src/array_from_pyobj/wrapmodule.c +0 -223
  633. numpy-1.9.2/numpy/f2py/tests/test_array_from_pyobj.py +0 -559
  634. numpy-1.9.2/numpy/f2py/tests/test_assumed_shape.py +0 -37
  635. numpy-1.9.2/numpy/f2py/tests/test_callback.py +0 -132
  636. numpy-1.9.2/numpy/f2py/tests/test_kind.py +0 -36
  637. numpy-1.9.2/numpy/f2py/tests/test_mixed.py +0 -41
  638. numpy-1.9.2/numpy/f2py/tests/test_regression.py +0 -32
  639. numpy-1.9.2/numpy/f2py/tests/test_return_character.py +0 -142
  640. numpy-1.9.2/numpy/f2py/tests/test_return_complex.py +0 -169
  641. numpy-1.9.2/numpy/f2py/tests/test_return_integer.py +0 -178
  642. numpy-1.9.2/numpy/f2py/tests/test_return_logical.py +0 -187
  643. numpy-1.9.2/numpy/f2py/tests/test_return_real.py +0 -203
  644. numpy-1.9.2/numpy/f2py/tests/test_size.py +0 -47
  645. numpy-1.9.2/numpy/f2py/tests/util.py +0 -353
  646. numpy-1.9.2/numpy/f2py/use_rules.py +0 -109
  647. numpy-1.9.2/numpy/fft/fftpack.c +0 -1501
  648. numpy-1.9.2/numpy/fft/fftpack.h +0 -28
  649. numpy-1.9.2/numpy/fft/fftpack.py +0 -1169
  650. numpy-1.9.2/numpy/fft/fftpack_litemodule.c +0 -371
  651. numpy-1.9.2/numpy/fft/info.py +0 -179
  652. numpy-1.9.2/numpy/fft/setup.py +0 -20
  653. numpy-1.9.2/numpy/fft/tests/test_fftpack.py +0 -75
  654. numpy-1.9.2/numpy/fft/tests/test_helper.py +0 -78
  655. numpy-1.9.2/numpy/lib/_iotools.py +0 -891
  656. numpy-1.9.2/numpy/lib/arraypad.py +0 -1475
  657. numpy-1.9.2/numpy/lib/arraysetops.py +0 -464
  658. numpy-1.9.2/numpy/lib/arrayterator.py +0 -226
  659. numpy-1.9.2/numpy/lib/financial.py +0 -737
  660. numpy-1.9.2/numpy/lib/format.py +0 -771
  661. numpy-1.9.2/numpy/lib/function_base.py +0 -3884
  662. numpy-1.9.2/numpy/lib/index_tricks.py +0 -869
  663. numpy-1.9.2/numpy/lib/info.py +0 -151
  664. numpy-1.9.2/numpy/lib/nanfunctions.py +0 -1158
  665. numpy-1.9.2/numpy/lib/npyio.py +0 -1918
  666. numpy-1.9.2/numpy/lib/polynomial.py +0 -1271
  667. numpy-1.9.2/numpy/lib/recfunctions.py +0 -1003
  668. numpy-1.9.2/numpy/lib/setup.py +0 -23
  669. numpy-1.9.2/numpy/lib/shape_base.py +0 -865
  670. numpy-1.9.2/numpy/lib/src/_compiled_base.c +0 -1761
  671. numpy-1.9.2/numpy/lib/stride_tricks.py +0 -123
  672. numpy-1.9.2/numpy/lib/tests/test__iotools.py +0 -326
  673. numpy-1.9.2/numpy/lib/tests/test__version.py +0 -57
  674. numpy-1.9.2/numpy/lib/tests/test_arraypad.py +0 -560
  675. numpy-1.9.2/numpy/lib/tests/test_arraysetops.py +0 -301
  676. numpy-1.9.2/numpy/lib/tests/test_financial.py +0 -160
  677. numpy-1.9.2/numpy/lib/tests/test_format.py +0 -716
  678. numpy-1.9.2/numpy/lib/tests/test_function_base.py +0 -2145
  679. numpy-1.9.2/numpy/lib/tests/test_index_tricks.py +0 -289
  680. numpy-1.9.2/numpy/lib/tests/test_io.py +0 -1754
  681. numpy-1.9.2/numpy/lib/tests/test_nanfunctions.py +0 -774
  682. numpy-1.9.2/numpy/lib/tests/test_polynomial.py +0 -177
  683. numpy-1.9.2/numpy/lib/tests/test_recfunctions.py +0 -705
  684. numpy-1.9.2/numpy/lib/tests/test_shape_base.py +0 -368
  685. numpy-1.9.2/numpy/lib/tests/test_stride_tricks.py +0 -238
  686. numpy-1.9.2/numpy/lib/tests/test_twodim_base.py +0 -504
  687. numpy-1.9.2/numpy/lib/tests/test_type_check.py +0 -328
  688. numpy-1.9.2/numpy/lib/twodim_base.py +0 -1003
  689. numpy-1.9.2/numpy/lib/type_check.py +0 -605
  690. numpy-1.9.2/numpy/lib/utils.py +0 -1176
  691. numpy-1.9.2/numpy/linalg/lapack_lite/python_xerbla.c +0 -47
  692. numpy-1.9.2/numpy/linalg/lapack_litemodule.c +0 -362
  693. numpy-1.9.2/numpy/linalg/linalg.py +0 -2136
  694. numpy-1.9.2/numpy/linalg/tests/test_build.py +0 -53
  695. numpy-1.9.2/numpy/linalg/tests/test_linalg.py +0 -1156
  696. numpy-1.9.2/numpy/linalg/tests/test_regression.py +0 -90
  697. numpy-1.9.2/numpy/linalg/umath_linalg.c.src +0 -3210
  698. numpy-1.9.2/numpy/ma/__init__.py +0 -58
  699. numpy-1.9.2/numpy/ma/bench.py +0 -166
  700. numpy-1.9.2/numpy/ma/core.py +0 -7374
  701. numpy-1.9.2/numpy/ma/extras.py +0 -1932
  702. numpy-1.9.2/numpy/ma/mrecords.py +0 -734
  703. numpy-1.9.2/numpy/ma/setup.py +0 -20
  704. numpy-1.9.2/numpy/ma/tests/test_core.py +0 -3706
  705. numpy-1.9.2/numpy/ma/tests/test_extras.py +0 -954
  706. numpy-1.9.2/numpy/ma/tests/test_mrecords.py +0 -521
  707. numpy-1.9.2/numpy/ma/tests/test_old_ma.py +0 -869
  708. numpy-1.9.2/numpy/ma/tests/test_regression.py +0 -75
  709. numpy-1.9.2/numpy/ma/tests/test_subclassing.py +0 -236
  710. numpy-1.9.2/numpy/ma/testutils.py +0 -240
  711. numpy-1.9.2/numpy/ma/timer_comparison.py +0 -459
  712. numpy-1.9.2/numpy/matlib.py +0 -358
  713. numpy-1.9.2/numpy/matrixlib/defmatrix.py +0 -1094
  714. numpy-1.9.2/numpy/matrixlib/tests/test_defmatrix.py +0 -400
  715. numpy-1.9.2/numpy/matrixlib/tests/test_multiarray.py +0 -18
  716. numpy-1.9.2/numpy/matrixlib/tests/test_numeric.py +0 -10
  717. numpy-1.9.2/numpy/matrixlib/tests/test_regression.py +0 -34
  718. numpy-1.9.2/numpy/polynomial/_polybase.py +0 -962
  719. numpy-1.9.2/numpy/polynomial/chebyshev.py +0 -2056
  720. numpy-1.9.2/numpy/polynomial/hermite.py +0 -1789
  721. numpy-1.9.2/numpy/polynomial/hermite_e.py +0 -1786
  722. numpy-1.9.2/numpy/polynomial/laguerre.py +0 -1781
  723. numpy-1.9.2/numpy/polynomial/legendre.py +0 -1809
  724. numpy-1.9.2/numpy/polynomial/polytemplate.py +0 -927
  725. numpy-1.9.2/numpy/polynomial/polyutils.py +0 -403
  726. numpy-1.9.2/numpy/random/mtrand/distributions.c +0 -892
  727. numpy-1.9.2/numpy/random/mtrand/mtrand.c +0 -31204
  728. numpy-1.9.2/numpy/random/mtrand/mtrand.pyx +0 -4706
  729. numpy-1.9.2/numpy/random/setup.py +0 -74
  730. numpy-1.9.2/numpy/random/tests/test_random.py +0 -707
  731. numpy-1.9.2/numpy/random/tests/test_regression.py +0 -86
  732. numpy-1.9.2/numpy/setup.py +0 -27
  733. numpy-1.9.2/numpy/testing/__init__.py +0 -16
  734. numpy-1.9.2/numpy/testing/decorators.py +0 -271
  735. numpy-1.9.2/numpy/testing/noseclasses.py +0 -353
  736. numpy-1.9.2/numpy/testing/nosetester.py +0 -504
  737. numpy-1.9.2/numpy/testing/print_coercion_tables.py +0 -89
  738. numpy-1.9.2/numpy/testing/setup.py +0 -20
  739. numpy-1.9.2/numpy/testing/tests/test_decorators.py +0 -185
  740. numpy-1.9.2/numpy/testing/tests/test_utils.py +0 -558
  741. numpy-1.9.2/numpy/testing/utils.py +0 -1715
  742. numpy-1.9.2/numpy/tests/test_ctypeslib.py +0 -102
  743. numpy-1.9.2/numpy/tests/test_matlib.py +0 -55
  744. numpy-1.9.2/numpy/version.py +0 -10
  745. numpy-1.9.2/setup.py +0 -251
  746. numpy-1.9.2/site.cfg.example +0 -157
  747. numpy-1.9.2/tools/swig/README +0 -135
  748. numpy-1.9.2/tools/swig/numpy.i +0 -3085
  749. numpy-1.9.2/tools/swig/test/Array.i +0 -102
  750. numpy-1.9.2/tools/swig/test/Makefile +0 -34
  751. numpy-1.9.2/tools/swig/test/setup.py +0 -64
  752. numpy-1.9.2/tools/swig/test/testArray.py +0 -284
  753. numpy-1.9.2/tools/swig/test/testFarray.py +0 -159
  754. numpy-1.9.2/tools/swig/test/testFortran.py +0 -173
  755. numpy-1.9.2/tools/swig/test/testMatrix.py +0 -362
  756. numpy-1.9.2/tools/swig/test/testSuperTensor.py +0 -388
  757. numpy-1.9.2/tools/swig/test/testTensor.py +0 -402
  758. numpy-1.9.2/tools/swig/test/testVector.py +0 -381
  759. {numpy-1.9.2 → numpy-1.10.0.post2}/BENTO_BUILD.txt +0 -0
  760. {numpy-1.9.2 → numpy-1.10.0.post2}/COMPATIBILITY +0 -0
  761. {numpy-1.9.2 → numpy-1.10.0.post2}/DEV_README.txt +0 -0
  762. {numpy-1.9.2 → numpy-1.10.0.post2}/README.txt +0 -0
  763. {numpy-1.9.2 → numpy-1.10.0.post2}/THANKS.txt +0 -0
  764. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/Makefile +0 -0
  765. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/BUGS.txt +0 -0
  766. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/FAQ.txt +0 -0
  767. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/HISTORY.txt +0 -0
  768. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/Makefile +0 -0
  769. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/OLDNEWS.txt +0 -0
  770. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/README.txt +0 -0
  771. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/Release-1.x.txt +0 -0
  772. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/Release-2.x.txt +0 -0
  773. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/Release-3.x.txt +0 -0
  774. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/Release-4.x.txt +0 -0
  775. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/TESTING.txt +0 -0
  776. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/THANKS.txt +0 -0
  777. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/TODO.txt +0 -0
  778. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/apps.tex +0 -0
  779. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/bugs.tex +0 -0
  780. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/collectinput.py +0 -0
  781. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/commands.tex +0 -0
  782. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/default.css +0 -0
  783. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/docutils.conf +0 -0
  784. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/ex1/arr.f +0 -0
  785. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/ex1/bar.f +0 -0
  786. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/ex1/foo.f +0 -0
  787. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/ex1/foobar-smart.f90 +0 -0
  788. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/ex1/foobar.f90 +0 -0
  789. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/ex1/foobarmodule.tex +0 -0
  790. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/ex1/runme +0 -0
  791. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/f2py.1 +0 -0
  792. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/f2py2e.tex +0 -0
  793. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/README.txt +0 -0
  794. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/aerostructure.jpg +0 -0
  795. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/flow.jpg +0 -0
  796. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/mk_html.sh +0 -0
  797. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/mk_pdf.sh +0 -0
  798. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/mk_ps.sh +0 -0
  799. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/src/examples/exp1.f +0 -0
  800. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/src/examples/exp1mess.txt +0 -0
  801. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/src/examples/exp1session.txt +0 -0
  802. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/src/examples/foo.pyf +0 -0
  803. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/src/examples/foom.pyf +0 -0
  804. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/structure.jpg +0 -0
  805. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/fortranobject.tex +0 -0
  806. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/hello.f +0 -0
  807. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/index.html +0 -0
  808. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/intro.tex +0 -0
  809. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/multiarray/array_from_pyobj.c +0 -0
  810. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/multiarray/bar.c +0 -0
  811. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/multiarray/foo.f +0 -0
  812. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/multiarray/fortran_array_from_pyobj.txt +0 -0
  813. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/multiarray/fun.pyf +0 -0
  814. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/multiarray/run.pyf +0 -0
  815. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/multiarray/transpose.txt +0 -0
  816. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/multiarrays.txt +0 -0
  817. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/notes.tex +0 -0
  818. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/oldnews.html +0 -0
  819. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/options.tex +0 -0
  820. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/pyforttest.pyf +0 -0
  821. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/pytest.py +0 -0
  822. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/python9.tex +0 -0
  823. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/signaturefile.tex +0 -0
  824. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/simple.f +0 -0
  825. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/simple_session.dat +0 -0
  826. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/using_F_compiler.txt +0 -0
  827. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/win32_notes.txt +0 -0
  828. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/postprocess.py +0 -0
  829. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/release/1.3.0-notes.rst +0 -0
  830. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/release/1.4.0-notes.rst +0 -0
  831. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/release/1.5.0-notes.rst +0 -0
  832. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/release/1.6.0-notes.rst +0 -0
  833. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/release/1.6.1-notes.rst +0 -0
  834. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/release/1.6.2-notes.rst +0 -0
  835. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/release/1.7.0-notes.rst +0 -0
  836. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/release/1.7.1-notes.rst +0 -0
  837. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/release/1.7.2-notes.rst +0 -0
  838. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/release/1.8.0-notes.rst +0 -0
  839. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/release/1.8.1-notes.rst +0 -0
  840. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/release/1.8.2-notes.rst +0 -0
  841. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/release/1.9.0-notes.rst +0 -0
  842. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/release/1.9.1-notes.rst +0 -0
  843. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/release/1.9.2-notes.rst +0 -0
  844. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/release/time_based_proposal.rst +0 -0
  845. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/.gitignore +0 -0
  846. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/Makefile +0 -0
  847. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/README.rst +0 -0
  848. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_static/scipyshiny_small.png +0 -0
  849. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/layout.html +0 -0
  850. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/searchbox.html +0 -0
  851. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/sourcelink.html +0 -0
  852. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/css/extend.css +0 -0
  853. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/css/pygments.css +0 -0
  854. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/css/scipy-central.css +0 -0
  855. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/css/spc-bootstrap.css +0 -0
  856. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/css/spc-extend.css +0 -0
  857. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/all-icons.svg +0 -0
  858. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/contents.png +0 -0
  859. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/create-new-account-icon.png +0 -0
  860. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/external-link-icon-shrunk.png +0 -0
  861. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/external-link-icon.png +0 -0
  862. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/external-link-icon.svg +0 -0
  863. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/external-link-list-icon-tiniest.png +0 -0
  864. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/external-link-list-icon-tiny.png +0 -0
  865. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/external-link-list-icon.png +0 -0
  866. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ad.png +0 -0
  867. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ae.png +0 -0
  868. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-af.png +0 -0
  869. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ag.png +0 -0
  870. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ai.png +0 -0
  871. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-al.png +0 -0
  872. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-am.png +0 -0
  873. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ao.png +0 -0
  874. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-aq.png +0 -0
  875. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ar.png +0 -0
  876. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-as.png +0 -0
  877. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-at.png +0 -0
  878. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-au.png +0 -0
  879. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-aw.png +0 -0
  880. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-az.png +0 -0
  881. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ba.png +0 -0
  882. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bb.png +0 -0
  883. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bd.png +0 -0
  884. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-be.png +0 -0
  885. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bf.png +0 -0
  886. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bg.png +0 -0
  887. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bh.png +0 -0
  888. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bi.png +0 -0
  889. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bj.png +0 -0
  890. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bl.png +0 -0
  891. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bm.png +0 -0
  892. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bn.png +0 -0
  893. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bo.png +0 -0
  894. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-br.png +0 -0
  895. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bs.png +0 -0
  896. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bt.png +0 -0
  897. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bw.png +0 -0
  898. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-by.png +0 -0
  899. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bz.png +0 -0
  900. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ca.png +0 -0
  901. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cc.png +0 -0
  902. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cd.png +0 -0
  903. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cf.png +0 -0
  904. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cg.png +0 -0
  905. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ch.png +0 -0
  906. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ci.png +0 -0
  907. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ck.png +0 -0
  908. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cl.png +0 -0
  909. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cm.png +0 -0
  910. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cn.png +0 -0
  911. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-co.png +0 -0
  912. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cr.png +0 -0
  913. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cu.png +0 -0
  914. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cv.png +0 -0
  915. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cw.png +0 -0
  916. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cx.png +0 -0
  917. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cy.png +0 -0
  918. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cz.png +0 -0
  919. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-de.png +0 -0
  920. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-dj.png +0 -0
  921. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-dk.png +0 -0
  922. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-dm.png +0 -0
  923. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-do.png +0 -0
  924. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-dz.png +0 -0
  925. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ec.png +0 -0
  926. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ee.png +0 -0
  927. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-eg.png +0 -0
  928. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-er.png +0 -0
  929. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-es.png +0 -0
  930. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-et.png +0 -0
  931. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-fi.png +0 -0
  932. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-fj.png +0 -0
  933. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-fk.png +0 -0
  934. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-fm.png +0 -0
  935. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-fo.png +0 -0
  936. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-fr.png +0 -0
  937. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ga.png +0 -0
  938. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gb.png +0 -0
  939. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gd.png +0 -0
  940. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ge.png +0 -0
  941. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gf.png +0 -0
  942. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gg.png +0 -0
  943. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gh.png +0 -0
  944. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gi.png +0 -0
  945. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gl.png +0 -0
  946. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gm.png +0 -0
  947. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gn.png +0 -0
  948. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gq.png +0 -0
  949. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gr.png +0 -0
  950. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gs.png +0 -0
  951. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gt.png +0 -0
  952. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gu.png +0 -0
  953. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gw.png +0 -0
  954. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gy.png +0 -0
  955. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-hk.png +0 -0
  956. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-hm.png +0 -0
  957. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-hn.png +0 -0
  958. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-hr.png +0 -0
  959. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ht.png +0 -0
  960. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-hu.png +0 -0
  961. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-id.png +0 -0
  962. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ie.png +0 -0
  963. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-il.png +0 -0
  964. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-im.png +0 -0
  965. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-in.png +0 -0
  966. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-io.png +0 -0
  967. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-iq.png +0 -0
  968. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ir.png +0 -0
  969. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-is.png +0 -0
  970. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-it.png +0 -0
  971. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-je.png +0 -0
  972. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-jm.png +0 -0
  973. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-jo.png +0 -0
  974. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-jp.png +0 -0
  975. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ke.png +0 -0
  976. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-kg.png +0 -0
  977. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-kh.png +0 -0
  978. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ki.png +0 -0
  979. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-km.png +0 -0
  980. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-kn.png +0 -0
  981. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-kp.png +0 -0
  982. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-kr.png +0 -0
  983. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-kw.png +0 -0
  984. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ky.png +0 -0
  985. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-kz.png +0 -0
  986. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-la.png +0 -0
  987. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-lb.png +0 -0
  988. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-lc.png +0 -0
  989. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-li.png +0 -0
  990. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-lk.png +0 -0
  991. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-lr.png +0 -0
  992. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ls.png +0 -0
  993. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-lt.png +0 -0
  994. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-lu.png +0 -0
  995. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-lv.png +0 -0
  996. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ly.png +0 -0
  997. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ma.png +0 -0
  998. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mc.png +0 -0
  999. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-md.png +0 -0
  1000. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-me.png +0 -0
  1001. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mf.png +0 -0
  1002. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mg.png +0 -0
  1003. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mh.png +0 -0
  1004. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mk.png +0 -0
  1005. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ml.png +0 -0
  1006. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mm.png +0 -0
  1007. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mn.png +0 -0
  1008. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mo.png +0 -0
  1009. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mp.png +0 -0
  1010. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mq.png +0 -0
  1011. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mr.png +0 -0
  1012. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ms.png +0 -0
  1013. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mt.png +0 -0
  1014. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mu.png +0 -0
  1015. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mv.png +0 -0
  1016. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mw.png +0 -0
  1017. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mx.png +0 -0
  1018. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-my.png +0 -0
  1019. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mz.png +0 -0
  1020. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-na.png +0 -0
  1021. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-nc.png +0 -0
  1022. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ne.png +0 -0
  1023. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-nf.png +0 -0
  1024. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ng.png +0 -0
  1025. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ni.png +0 -0
  1026. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-nl.png +0 -0
  1027. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-no.png +0 -0
  1028. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-np.png +0 -0
  1029. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-nr.png +0 -0
  1030. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-nu.png +0 -0
  1031. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-nz.png +0 -0
  1032. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-om.png +0 -0
  1033. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pa.png +0 -0
  1034. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pe.png +0 -0
  1035. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pf.png +0 -0
  1036. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pg.png +0 -0
  1037. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ph.png +0 -0
  1038. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pk.png +0 -0
  1039. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pl.png +0 -0
  1040. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pm.png +0 -0
  1041. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pn.png +0 -0
  1042. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pr.png +0 -0
  1043. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ps.png +0 -0
  1044. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pt.png +0 -0
  1045. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pw.png +0 -0
  1046. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-py.png +0 -0
  1047. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-qa.png +0 -0
  1048. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-re.png +0 -0
  1049. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ro.png +0 -0
  1050. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-rs.png +0 -0
  1051. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ru.png +0 -0
  1052. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-rw.png +0 -0
  1053. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sa.png +0 -0
  1054. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sb.png +0 -0
  1055. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sc.png +0 -0
  1056. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sd.png +0 -0
  1057. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-se.png +0 -0
  1058. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sg.png +0 -0
  1059. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sh.png +0 -0
  1060. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-si.png +0 -0
  1061. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sj.png +0 -0
  1062. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sk.png +0 -0
  1063. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sl.png +0 -0
  1064. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sm.png +0 -0
  1065. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sn.png +0 -0
  1066. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-so.png +0 -0
  1067. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sr.png +0 -0
  1068. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-st.png +0 -0
  1069. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sv.png +0 -0
  1070. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sy.png +0 -0
  1071. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sz.png +0 -0
  1072. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tc.png +0 -0
  1073. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-td.png +0 -0
  1074. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tf.png +0 -0
  1075. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tg.png +0 -0
  1076. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-th.png +0 -0
  1077. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tj.png +0 -0
  1078. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tk.png +0 -0
  1079. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tl.png +0 -0
  1080. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tm.png +0 -0
  1081. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tn.png +0 -0
  1082. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-to.png +0 -0
  1083. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tr.png +0 -0
  1084. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tt.png +0 -0
  1085. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tv.png +0 -0
  1086. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tw.png +0 -0
  1087. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tz.png +0 -0
  1088. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ua.png +0 -0
  1089. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ug.png +0 -0
  1090. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-um.png +0 -0
  1091. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-us.png +0 -0
  1092. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-uy.png +0 -0
  1093. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-uz.png +0 -0
  1094. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-va.png +0 -0
  1095. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-vc.png +0 -0
  1096. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ve.png +0 -0
  1097. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-vg.png +0 -0
  1098. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-vi.png +0 -0
  1099. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-vn.png +0 -0
  1100. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-vu.png +0 -0
  1101. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-wf.png +0 -0
  1102. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ws.png +0 -0
  1103. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ye.png +0 -0
  1104. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-za.png +0 -0
  1105. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-zm.png +0 -0
  1106. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-zw.png +0 -0
  1107. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/glyphicons-halflings-white.png +0 -0
  1108. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/glyphicons-halflings.png +0 -0
  1109. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/important-icon.png +0 -0
  1110. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/information-icon.png +0 -0
  1111. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/internet-web-browser.png +0 -0
  1112. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/multiple-file-icon-shrunk.png +0 -0
  1113. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/multiple-file-icon.png +0 -0
  1114. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/multiple-file-icon.svg +0 -0
  1115. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/multiple-file-list-icon-tiny.png +0 -0
  1116. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/multiple-file-list-icon.png +0 -0
  1117. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/navigation.png +0 -0
  1118. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/person-list-icon-tiny.png +0 -0
  1119. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/person-list-icon.png +0 -0
  1120. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/scipy-logo.png +0 -0
  1121. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/scipy_org_logo.gif +0 -0
  1122. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/scipycentral_logo.png +0 -0
  1123. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/scipyshiny_small.png +0 -0
  1124. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/send-email-icon.png +0 -0
  1125. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/single-file-icon-shrunk.png +0 -0
  1126. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/single-file-icon.png +0 -0
  1127. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/single-file-icon.svg +0 -0
  1128. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/single-file-list-icon-tiniest.png +0 -0
  1129. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/single-file-list-icon-tiny.png +0 -0
  1130. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/single-file-list-icon.png +0 -0
  1131. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/transparent-pixel.gif +0 -0
  1132. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/ui-anim_basic_16x16.gif +0 -0
  1133. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/js/copybutton.js +0 -0
  1134. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/accordion.less +0 -0
  1135. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/alerts.less +0 -0
  1136. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/bootstrap.less +0 -0
  1137. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/breadcrumbs.less +0 -0
  1138. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/button-groups.less +0 -0
  1139. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/buttons.less +0 -0
  1140. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/carousel.less +0 -0
  1141. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/close.less +0 -0
  1142. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/code.less +0 -0
  1143. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/component-animations.less +0 -0
  1144. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/dropdowns.less +0 -0
  1145. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/forms.less +0 -0
  1146. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/grid.less +0 -0
  1147. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/hero-unit.less +0 -0
  1148. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/labels-badges.less +0 -0
  1149. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/layouts.less +0 -0
  1150. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/media.less +0 -0
  1151. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/mixins.less +0 -0
  1152. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/modals.less +0 -0
  1153. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/navbar.less +0 -0
  1154. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/navs.less +0 -0
  1155. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/pager.less +0 -0
  1156. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/pagination.less +0 -0
  1157. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/popovers.less +0 -0
  1158. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/progress-bars.less +0 -0
  1159. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/reset.less +0 -0
  1160. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/responsive-1200px-min.less +0 -0
  1161. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/responsive-767px-max.less +0 -0
  1162. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/responsive-768px-979px.less +0 -0
  1163. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/responsive-navbar.less +0 -0
  1164. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/responsive-utilities.less +0 -0
  1165. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/responsive.less +0 -0
  1166. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/scaffolding.less +0 -0
  1167. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/sprites.less +0 -0
  1168. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/tables.less +0 -0
  1169. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/thumbnails.less +0 -0
  1170. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/tooltip.less +0 -0
  1171. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/type.less +0 -0
  1172. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/utilities.less +0 -0
  1173. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/variables.less +0 -0
  1174. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/wells.less +0 -0
  1175. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/spc-bootstrap.less +0 -0
  1176. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/spc-content.less +0 -0
  1177. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/spc-extend.less +0 -0
  1178. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/spc-footer.less +0 -0
  1179. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/spc-header.less +0 -0
  1180. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/spc-rightsidebar.less +0 -0
  1181. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/spc-utils.less +0 -0
  1182. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/scipy.css_t +0 -0
  1183. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/theme.conf +0 -0
  1184. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/conf.py +0 -0
  1185. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/index.rst +0 -0
  1186. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/test_autodoc.rst +0 -0
  1187. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/test_autodoc_2.rst +0 -0
  1188. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/test_autodoc_3.rst +0 -0
  1189. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/test_autodoc_4.rst +0 -0
  1190. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/test_optimize.rst +0 -0
  1191. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/_templates/autosummary/class.rst +0 -0
  1192. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/_templates/indexcontent.html +0 -0
  1193. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/_templates/indexsidebar.html +0 -0
  1194. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/_templates/layout.html +0 -0
  1195. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/about.rst +0 -0
  1196. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/bugs.rst +0 -0
  1197. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/contents.rst +0 -0
  1198. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/dev/gitwash/configure_git.rst +0 -0
  1199. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/dev/gitwash/development_setup.rst +0 -0
  1200. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/dev/gitwash/dot2_dot3.rst +0 -0
  1201. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/dev/gitwash/following_latest.rst +0 -0
  1202. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/dev/gitwash/forking_button.png +0 -0
  1203. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/dev/gitwash/git_development.rst +0 -0
  1204. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/dev/gitwash/git_intro.rst +0 -0
  1205. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/dev/gitwash/git_resources.rst +0 -0
  1206. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/dev/gitwash/pull_button.png +0 -0
  1207. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/dev/gitwash_links.txt +0 -0
  1208. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/advanced.rst +0 -0
  1209. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/allocarr.f90 +0 -0
  1210. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/allocarr_session.dat +0 -0
  1211. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/array.f +0 -0
  1212. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/array_session.dat +0 -0
  1213. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/calculate.f +0 -0
  1214. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/calculate_session.dat +0 -0
  1215. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/callback.f +0 -0
  1216. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/callback2.pyf +0 -0
  1217. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/callback_session.dat +0 -0
  1218. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/common.f +0 -0
  1219. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/common_session.dat +0 -0
  1220. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/compile_session.dat +0 -0
  1221. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/distutils.rst +0 -0
  1222. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/extcallback.f +0 -0
  1223. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/extcallback_session.dat +0 -0
  1224. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/fib1.f +0 -0
  1225. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/fib1.pyf +0 -0
  1226. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/fib2.pyf +0 -0
  1227. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/fib3.f +0 -0
  1228. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/ftype.f +0 -0
  1229. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/ftype_session.dat +0 -0
  1230. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/getting-started.rst +0 -0
  1231. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/index.rst +0 -0
  1232. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/moddata.f90 +0 -0
  1233. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/moddata_session.dat +0 -0
  1234. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/python-usage.rst +0 -0
  1235. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/run_main_session.dat +0 -0
  1236. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/scalar.f +0 -0
  1237. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/scalar_session.dat +0 -0
  1238. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/setup_example.py +0 -0
  1239. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/signature-file.rst +0 -0
  1240. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/spam.pyf +0 -0
  1241. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/spam_session.dat +0 -0
  1242. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/string.f +0 -0
  1243. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/string_session.dat +0 -0
  1244. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/usage.rst +0 -0
  1245. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/var.pyf +0 -0
  1246. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/var_session.dat +0 -0
  1247. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/glossary.rst +0 -0
  1248. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/license.rst +0 -0
  1249. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/neps/datetime-proposal.rst +0 -0
  1250. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/neps/datetime-proposal3.rst +0 -0
  1251. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/neps/deferred-ufunc-evaluation.rst +0 -0
  1252. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/neps/generalized-ufuncs.rst +0 -0
  1253. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/neps/groupby_additions.rst +0 -0
  1254. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/neps/index.rst +0 -0
  1255. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/neps/math_config_clean.rst +0 -0
  1256. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/neps/missing-data.rst +0 -0
  1257. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/neps/new-iterator-ufunc.rst +0 -0
  1258. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/neps/newbugtracker.rst +0 -0
  1259. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/neps/npy-format.rst +0 -0
  1260. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/neps/structured_array_extensions.rst +0 -0
  1261. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/neps/ufunc-overrides.rst +0 -0
  1262. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/neps/warnfix.rst +0 -0
  1263. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/arrays.datetime.rst +0 -0
  1264. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/arrays.nditer.rst +0 -0
  1265. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/arrays.rst +0 -0
  1266. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/c-api.deprecations.rst +0 -0
  1267. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/c-api.rst +0 -0
  1268. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/distutils.rst +0 -0
  1269. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/figures/dtype-hierarchy.dia +0 -0
  1270. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/figures/dtype-hierarchy.pdf +0 -0
  1271. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/figures/dtype-hierarchy.png +0 -0
  1272. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/figures/threefundamental.fig +0 -0
  1273. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/figures/threefundamental.pdf +0 -0
  1274. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/figures/threefundamental.png +0 -0
  1275. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/internals.rst +0 -0
  1276. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/maskedarray.baseclass.rst +0 -0
  1277. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/maskedarray.generic.rst +0 -0
  1278. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/maskedarray.rst +0 -0
  1279. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.array-creation.rst +0 -0
  1280. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.bitwise.rst +0 -0
  1281. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.char.rst +0 -0
  1282. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.ctypeslib.rst +0 -0
  1283. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.datetime.rst +0 -0
  1284. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.dtype.rst +0 -0
  1285. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.dual.rst +0 -0
  1286. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.emath.rst +0 -0
  1287. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.err.rst +0 -0
  1288. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.fft.rst +0 -0
  1289. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.financial.rst +0 -0
  1290. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.functional.rst +0 -0
  1291. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.help.rst +0 -0
  1292. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.indexing.rst +0 -0
  1293. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.logic.rst +0 -0
  1294. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.math.rst +0 -0
  1295. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.matlib.rst +0 -0
  1296. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.numarray.rst +0 -0
  1297. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.oldnumeric.rst +0 -0
  1298. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.other.rst +0 -0
  1299. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.padding.rst +0 -0
  1300. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.chebyshev.rst +0 -0
  1301. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.classes.rst +0 -0
  1302. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.hermite.rst +0 -0
  1303. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.hermite_e.rst +0 -0
  1304. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.laguerre.rst +0 -0
  1305. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.legendre.rst +0 -0
  1306. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.package.rst +0 -0
  1307. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.poly1d.rst +0 -0
  1308. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.polynomial.rst +0 -0
  1309. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.rst +0 -0
  1310. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.random.rst +0 -0
  1311. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.rst +0 -0
  1312. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.set.rst +0 -0
  1313. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.testing.rst +0 -0
  1314. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.window.rst +0 -0
  1315. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/swig.rst +0 -0
  1316. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/user/basics.broadcasting.rst +0 -0
  1317. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/user/basics.byteswapping.rst +0 -0
  1318. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/user/basics.creation.rst +0 -0
  1319. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/user/basics.indexing.rst +0 -0
  1320. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/user/basics.io.rst +0 -0
  1321. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/user/basics.rst +0 -0
  1322. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/user/basics.subclassing.rst +0 -0
  1323. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/user/basics.types.rst +0 -0
  1324. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/user/c-info.rst +0 -0
  1325. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/user/howtofind.rst +0 -0
  1326. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/user/index.rst +0 -0
  1327. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/user/introduction.rst +0 -0
  1328. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/user/misc.rst +0 -0
  1329. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/user/performance.rst +0 -0
  1330. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/user/whatisnumpy.rst +0 -0
  1331. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/.gitignore +0 -0
  1332. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/.travis.yml +0 -0
  1333. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/LICENSE.txt +0 -0
  1334. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/MANIFEST.in +0 -0
  1335. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/README.rst +0 -0
  1336. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/__init__.py +0 -0
  1337. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/comment_eater.py +0 -0
  1338. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/compiler_unparse.py +0 -0
  1339. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/docscrape.py +0 -0
  1340. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/docscrape_sphinx.py +0 -0
  1341. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/linkcode.py +0 -0
  1342. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/numpydoc.py +0 -0
  1343. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/phantom_import.py +0 -0
  1344. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/plot_directive.py +0 -0
  1345. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/tests/test_docscrape.py +0 -0
  1346. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/tests/test_linkcode.py +0 -0
  1347. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/tests/test_phantom_import.py +0 -0
  1348. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/tests/test_plot_directive.py +0 -0
  1349. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/tests/test_traitsdoc.py +0 -0
  1350. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/traitsdoc.py +0 -0
  1351. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/setup.py +0 -0
  1352. {numpy-1.9.2/numpy/core/code_generators → numpy-1.10.0.post2/numpy/_build_utils}/__init__.py +0 -0
  1353. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/compat/__init__.py +0 -0
  1354. {numpy-1.9.2/numpy/distutils/tests/f2py_ext → numpy-1.10.0.post2/numpy/core/code_generators}/__init__.py +0 -0
  1355. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/code_generators/genapi.py +0 -0
  1356. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/code_generators/generate_numpy_api.py +0 -0
  1357. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/cversions.py +0 -0
  1358. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/include/numpy/_neighborhood_iterator_imp.h +0 -0
  1359. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/include/numpy/_numpyconfig.h.in +0 -0
  1360. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/include/numpy/arrayobject.h +0 -0
  1361. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/include/numpy/arrayscalars.h +0 -0
  1362. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/include/numpy/halffloat.h +0 -0
  1363. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/include/numpy/noprefix.h +0 -0
  1364. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/include/numpy/npy_1_7_deprecated_api.h +0 -0
  1365. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/include/numpy/npy_interrupt.h +0 -0
  1366. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/include/numpy/npy_no_deprecated_api.h +0 -0
  1367. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/include/numpy/npy_os.h +0 -0
  1368. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/include/numpy/old_defines.h +0 -0
  1369. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/include/numpy/oldnumeric.h +0 -0
  1370. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/include/numpy/ufuncobject.h +0 -0
  1371. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/include/numpy/utils.h +0 -0
  1372. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/info.py +0 -0
  1373. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/mlib.ini.in +0 -0
  1374. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/npymath.ini.in +0 -0
  1375. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/dummymodule.c +0 -0
  1376. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/_datetime.h +0 -0
  1377. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/alloc.h +0 -0
  1378. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/array_assign.c +0 -0
  1379. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/array_assign.h +0 -0
  1380. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/array_assign_array.c +0 -0
  1381. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/array_assign_scalar.c +0 -0
  1382. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/arrayobject.h +0 -0
  1383. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/buffer.h +0 -0
  1384. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/calculation.h +0 -0
  1385. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/conversion_utils.h +0 -0
  1386. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/convert.h +0 -0
  1387. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/convert_datatype.h +0 -0
  1388. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/ctors.h +0 -0
  1389. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/datetime_busday.h +0 -0
  1390. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/datetime_busdaycal.h +0 -0
  1391. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/datetime_strings.h +0 -0
  1392. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/descriptor.h +0 -0
  1393. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/flagsobject.c +0 -0
  1394. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/getset.h +0 -0
  1395. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/hashdescr.h +0 -0
  1396. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/item_selection.h +0 -0
  1397. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/iterators.h +0 -0
  1398. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/methods.h +0 -0
  1399. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/nditer_impl.h +0 -0
  1400. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/nditer_pywrap.h +0 -0
  1401. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/nditer_templ.c.src +0 -0
  1402. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/numpymemoryview.h +0 -0
  1403. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/numpyos.h +0 -0
  1404. {numpy-1.9.2/numpy/core/blasdot → numpy-1.10.0.post2/numpy/core/src/multiarray}/python_xerbla.c +0 -0
  1405. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/refcount.c +0 -0
  1406. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/refcount.h +0 -0
  1407. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/sequence.c +0 -0
  1408. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/sequence.h +0 -0
  1409. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/shape.h +0 -0
  1410. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/ucsnarrow.h +0 -0
  1411. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/usertypes.c +0 -0
  1412. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/usertypes.h +0 -0
  1413. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/npymath/_signbit.c +0 -0
  1414. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/npymath/halffloat.c +0 -0
  1415. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/npymath/npy_math_common.h +0 -0
  1416. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/npysort/binsearch.c.src +0 -0
  1417. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/private/lowlevel_strided_loops.h +0 -0
  1418. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/private/npy_binsearch.h.src +0 -0
  1419. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/private/npy_fpmath.h +0 -0
  1420. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/private/npy_pycompat.h +0 -0
  1421. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/umath/reduction.c +0 -0
  1422. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/umath/reduction.h +0 -0
  1423. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/umath/struct_ufunc_test.c.src +0 -0
  1424. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/umath/ufunc_object.h +0 -0
  1425. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/umath/ufunc_type_resolution.h +0 -0
  1426. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/tests/data/astype_copy.pkl +0 -0
  1427. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/tests/data/recarray_from_file.fits +0 -0
  1428. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/tests/test_scalarprint.py +0 -0
  1429. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/ctypeslib.py +0 -0
  1430. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/__version__.py +0 -0
  1431. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/command/__init__.py +0 -0
  1432. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/command/bdist_rpm.py +0 -0
  1433. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/command/build_py.py +0 -0
  1434. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/command/build_scripts.py +0 -0
  1435. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/command/build_src.py +0 -0
  1436. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/command/config_compiler.py +0 -0
  1437. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/command/develop.py +0 -0
  1438. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/command/egg_info.py +0 -0
  1439. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/command/install.py +0 -0
  1440. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/command/install_clib.py +0 -0
  1441. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/command/install_data.py +0 -0
  1442. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/command/install_headers.py +0 -0
  1443. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/command/sdist.py +0 -0
  1444. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/compat.py +0 -0
  1445. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/conv_template.py +0 -0
  1446. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/core.py +0 -0
  1447. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/cpuinfo.py +0 -0
  1448. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/environment.py +0 -0
  1449. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/extension.py +0 -0
  1450. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/__init__.py +0 -0
  1451. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/absoft.py +0 -0
  1452. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/g95.py +0 -0
  1453. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/hpux.py +0 -0
  1454. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/ibm.py +0 -0
  1455. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/lahey.py +0 -0
  1456. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/mips.py +0 -0
  1457. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/nag.py +0 -0
  1458. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/none.py +0 -0
  1459. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/pathf95.py +0 -0
  1460. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/vast.py +0 -0
  1461. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/from_template.py +0 -0
  1462. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/info.py +0 -0
  1463. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/line_endings.py +0 -0
  1464. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/log.py +0 -0
  1465. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/mingw/gfortran_vs2003_hack.c +0 -0
  1466. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/numpy_distribution.py +0 -0
  1467. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/pathccompiler.py +0 -0
  1468. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/setup.py +0 -0
  1469. {numpy-1.9.2/numpy/distutils/tests/f2py_f90_ext → numpy-1.10.0.post2/numpy/distutils/tests/f2py_ext}/__init__.py +0 -0
  1470. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/tests/f2py_ext/setup.py +0 -0
  1471. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/tests/f2py_ext/src/fib1.f +0 -0
  1472. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/tests/f2py_ext/src/fib2.pyf +0 -0
  1473. {numpy-1.9.2/numpy/distutils/tests/gen_ext → numpy-1.10.0.post2/numpy/distutils/tests/f2py_f90_ext}/__init__.py +0 -0
  1474. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/tests/f2py_f90_ext/include/body.f90 +0 -0
  1475. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/tests/f2py_f90_ext/setup.py +0 -0
  1476. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/tests/f2py_f90_ext/src/foo_free.f90 +0 -0
  1477. {numpy-1.9.2/numpy/distutils/tests/pyrex_ext → numpy-1.10.0.post2/numpy/distutils/tests/gen_ext}/__init__.py +0 -0
  1478. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/tests/gen_ext/setup.py +0 -0
  1479. {numpy-1.9.2/numpy/distutils/tests/swig_ext → numpy-1.10.0.post2/numpy/distutils/tests/pyrex_ext}/__init__.py +0 -0
  1480. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/tests/pyrex_ext/primes.pyx +0 -0
  1481. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/tests/pyrex_ext/setup.py +0 -0
  1482. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/tests/setup.py +0 -0
  1483. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/tests/swig_ext/setup.py +0 -0
  1484. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/tests/swig_ext/src/example.c +0 -0
  1485. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/tests/swig_ext/src/example.i +0 -0
  1486. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/tests/swig_ext/src/zoo.cc +0 -0
  1487. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/tests/swig_ext/src/zoo.h +0 -0
  1488. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/tests/swig_ext/src/zoo.i +0 -0
  1489. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/tests/test_exec_command.py +0 -0
  1490. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/doc/__init__.py +0 -0
  1491. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/doc/basics.py +0 -0
  1492. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/doc/broadcasting.py +0 -0
  1493. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/doc/constants.py +0 -0
  1494. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/doc/howtofind.py +0 -0
  1495. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/doc/internals.py +0 -0
  1496. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/doc/io.py +0 -0
  1497. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/doc/jargon.py +0 -0
  1498. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/doc/methods_vs_functions.py +0 -0
  1499. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/doc/misc.py +0 -0
  1500. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/doc/performance.py +0 -0
  1501. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/doc/subclassing.py +0 -0
  1502. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/doc/ufuncs.py +0 -0
  1503. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/dual.py +0 -0
  1504. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/f2py/__version__.py +0 -0
  1505. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/f2py/info.py +0 -0
  1506. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/f2py/tests/src/assumed_shape/.f2py_f2cmap +0 -0
  1507. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/f2py/tests/src/assumed_shape/foo_free.f90 +0 -0
  1508. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/f2py/tests/src/assumed_shape/foo_mod.f90 +0 -0
  1509. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/f2py/tests/src/assumed_shape/foo_use.f90 +0 -0
  1510. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/f2py/tests/src/assumed_shape/precision.f90 +0 -0
  1511. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/f2py/tests/src/kind/foo.f90 +0 -0
  1512. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/f2py/tests/src/mixed/foo.f +0 -0
  1513. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/f2py/tests/src/mixed/foo_fixed.f90 +0 -0
  1514. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/f2py/tests/src/mixed/foo_free.f90 +0 -0
  1515. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/f2py/tests/src/regression/inout.f90 +0 -0
  1516. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/f2py/tests/src/size/foo.f90 +0 -0
  1517. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/fft/__init__.py +0 -0
  1518. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/fft/helper.py +0 -0
  1519. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/lib/__init__.py +0 -0
  1520. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/lib/_datasource.py +0 -0
  1521. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/lib/_version.py +0 -0
  1522. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/lib/scimath.py +0 -0
  1523. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/lib/tests/data/python3.npy +0 -0
  1524. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/lib/tests/data/win64python2.npy +0 -0
  1525. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/lib/tests/test__datasource.py +0 -0
  1526. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/lib/tests/test_arrayterator.py +0 -0
  1527. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/lib/tests/test_regression.py +0 -0
  1528. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/lib/tests/test_ufunclike.py +0 -0
  1529. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/lib/tests/test_utils.py +0 -0
  1530. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/lib/ufunclike.py +0 -0
  1531. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/lib/user_array.py +0 -0
  1532. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/linalg/__init__.py +0 -0
  1533. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/linalg/info.py +0 -0
  1534. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/linalg/lapack_lite/blas_lite.c +0 -0
  1535. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/linalg/lapack_lite/dlamch.c +0 -0
  1536. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/linalg/lapack_lite/dlapack_lite.c +0 -0
  1537. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/linalg/lapack_lite/f2c.h +0 -0
  1538. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/linalg/lapack_lite/f2c_lite.c +0 -0
  1539. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/linalg/lapack_lite/zlapack_lite.c +0 -0
  1540. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/linalg/setup.py +0 -0
  1541. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/linalg/tests/test_deprecations.py +0 -0
  1542. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/ma/version.py +0 -0
  1543. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/matrixlib/__init__.py +0 -0
  1544. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/matrixlib/setup.py +0 -0
  1545. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/polynomial/__init__.py +0 -0
  1546. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/polynomial/polynomial.py +0 -0
  1547. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/polynomial/setup.py +0 -0
  1548. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/polynomial/tests/test_chebyshev.py +0 -0
  1549. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/polynomial/tests/test_classes.py +0 -0
  1550. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/polynomial/tests/test_hermite.py +0 -0
  1551. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/polynomial/tests/test_hermite_e.py +0 -0
  1552. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/polynomial/tests/test_laguerre.py +0 -0
  1553. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/polynomial/tests/test_legendre.py +0 -0
  1554. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/polynomial/tests/test_polynomial.py +0 -0
  1555. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/polynomial/tests/test_polyutils.py +0 -0
  1556. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/polynomial/tests/test_printing.py +0 -0
  1557. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/random/__init__.py +0 -0
  1558. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/random/info.py +0 -0
  1559. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/random/mtrand/Python.pxi +0 -0
  1560. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/random/mtrand/distributions.h +0 -0
  1561. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/random/mtrand/generate_mtrand_c.py +0 -0
  1562. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/random/mtrand/initarray.c +0 -0
  1563. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/random/mtrand/initarray.h +0 -0
  1564. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/random/mtrand/mtrand_py_helper.h +0 -0
  1565. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/random/mtrand/numpy.pxd +0 -0
  1566. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/random/mtrand/randomkit.c +0 -0
  1567. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/random/mtrand/randomkit.h +0 -0
  1568. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/testing/tests/test_doctesting.py +0 -0
  1569. {numpy-1.9.2 → numpy-1.10.0.post2}/setupegg.py +0 -0
  1570. {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/Makefile +0 -0
  1571. {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/pyfragments.swg +0 -0
  1572. {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/Array1.cxx +0 -0
  1573. {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/Array1.h +0 -0
  1574. {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/Array2.cxx +0 -0
  1575. {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/Array2.h +0 -0
  1576. {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/Farray.cxx +0 -0
  1577. {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/Farray.h +0 -0
  1578. {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/Farray.i +0 -0
  1579. {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/Fortran.cxx +0 -0
  1580. {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/Fortran.h +0 -0
  1581. {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/Fortran.i +0 -0
  1582. {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/Matrix.cxx +0 -0
  1583. {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/Matrix.h +0 -0
  1584. {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/Matrix.i +0 -0
  1585. {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/SuperTensor.cxx +0 -0
  1586. {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/SuperTensor.h +0 -0
  1587. {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/SuperTensor.i +0 -0
  1588. {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/Tensor.cxx +0 -0
  1589. {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/Tensor.h +0 -0
  1590. {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/Tensor.i +0 -0
  1591. {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/Vector.cxx +0 -0
  1592. {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/Vector.h +0 -0
  1593. {numpy-1.9.2 → 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
- }