numpy 1.9.3__zip → 1.10.0__zip

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of numpy might be problematic. Click here for more details.

Files changed (1590) hide show
  1. numpy-1.10.0.post2/INSTALL.txt +200 -0
  2. numpy-1.10.0.post2/LICENSE.txt +30 -0
  3. numpy-1.10.0.post2/MANIFEST.in +31 -0
  4. numpy-1.10.0.post2/PKG-INFO +47 -0
  5. numpy-1.10.0.post2/cnew.txt +117 -0
  6. numpy-1.10.0.post2/cold.txt +44 -0
  7. numpy-1.10.0.post2/committers.txt +160 -0
  8. numpy-1.10.0.post2/cpre.txt +283 -0
  9. numpy-1.10.0.post2/crel.txt +161 -0
  10. numpy-1.10.0.post2/doc/release/1.10.0-notes.rst +439 -0
  11. numpy-1.10.0.post2/doc/source/conf.py +331 -0
  12. numpy-1.10.0.post2/doc/source/dev/development_environment.rst +211 -0
  13. numpy-1.10.0.post2/doc/source/dev/gitwash/development_workflow.rst +534 -0
  14. numpy-1.10.0.post2/doc/source/dev/gitwash/git_links.inc +95 -0
  15. numpy-1.10.0.post2/doc/source/dev/gitwash/index.rst +14 -0
  16. numpy-1.10.0.post2/doc/source/dev/index.rst +11 -0
  17. numpy-1.10.0.post2/doc/source/reference/arrays.classes.rst +490 -0
  18. numpy-1.10.0.post2/doc/source/reference/arrays.dtypes.rst +536 -0
  19. numpy-1.10.0.post2/doc/source/reference/arrays.indexing.rst +549 -0
  20. numpy-1.10.0.post2/doc/source/reference/arrays.interface.rst +337 -0
  21. numpy-1.10.0.post2/doc/source/reference/arrays.ndarray.rst +622 -0
  22. numpy-1.10.0.post2/doc/source/reference/arrays.scalars.rst +291 -0
  23. numpy-1.10.0.post2/doc/source/reference/c-api.array.rst +3393 -0
  24. numpy-1.10.0.post2/doc/source/reference/c-api.config.rst +103 -0
  25. numpy-1.10.0.post2/doc/source/reference/c-api.coremath.rst +420 -0
  26. numpy-1.10.0.post2/doc/source/reference/c-api.dtype.rst +376 -0
  27. numpy-1.10.0.post2/doc/source/reference/c-api.generalized-ufuncs.rst +191 -0
  28. numpy-1.10.0.post2/doc/source/reference/c-api.iterator.rst +1300 -0
  29. numpy-1.10.0.post2/doc/source/reference/c-api.types-and-structures.rst +1240 -0
  30. numpy-1.10.0.post2/doc/source/reference/c-api.ufunc.rst +413 -0
  31. numpy-1.10.0.post2/doc/source/reference/index.rst +43 -0
  32. numpy-1.10.0.post2/doc/source/reference/internals.code-explanations.rst +615 -0
  33. numpy-1.10.0.post2/doc/source/reference/routines.array-manipulation.rst +115 -0
  34. numpy-1.10.0.post2/doc/source/reference/routines.io.rst +78 -0
  35. numpy-1.10.0.post2/doc/source/reference/routines.linalg.rst +91 -0
  36. numpy-1.10.0.post2/doc/source/reference/routines.ma.rst +407 -0
  37. numpy-1.10.0.post2/doc/source/reference/routines.sort.rst +41 -0
  38. numpy-1.10.0.post2/doc/source/reference/routines.statistics.rst +57 -0
  39. numpy-1.10.0.post2/doc/source/reference/swig.interface-file.rst +1066 -0
  40. numpy-1.10.0.post2/doc/source/reference/swig.testing.rst +167 -0
  41. numpy-1.10.0.post2/doc/source/reference/ufuncs.rst +666 -0
  42. numpy-1.10.0.post2/doc/source/release.rst +20 -0
  43. numpy-1.10.0.post2/doc/source/user/basics.io.genfromtxt.rst +531 -0
  44. numpy-1.10.0.post2/doc/source/user/basics.rec.rst +7 -0
  45. numpy-1.10.0.post2/doc/source/user/c-info.beyond-basics.rst +560 -0
  46. numpy-1.10.0.post2/doc/source/user/c-info.how-to-extend.rst +642 -0
  47. numpy-1.10.0.post2/doc/source/user/c-info.python-as-glue.rst +1177 -0
  48. numpy-1.10.0.post2/doc/source/user/c-info.ufunc-tutorial.rst +1211 -0
  49. numpy-1.10.0.post2/doc/source/user/install.rst +194 -0
  50. numpy-1.10.0.post2/numpy/__init__.py +227 -0
  51. numpy-1.10.0.post2/numpy/_build_utils/README +8 -0
  52. numpy-1.10.0.post2/numpy/_build_utils/apple_accelerate.py +21 -0
  53. numpy-1.10.0.post2/numpy/_build_utils/common.py +138 -0
  54. numpy-1.10.0.post2/numpy/_build_utils/src/apple_sgemv_fix.c +227 -0
  55. numpy-1.10.0.post2/numpy/_build_utils/waf.py +531 -0
  56. numpy-1.10.0.post2/numpy/_import_tools.py +353 -0
  57. numpy-1.10.0.post2/numpy/add_newdocs.py +7611 -0
  58. numpy-1.10.0.post2/numpy/compat/_inspect.py +194 -0
  59. numpy-1.10.0.post2/numpy/compat/py3k.py +88 -0
  60. numpy-1.10.0.post2/numpy/compat/setup.py +12 -0
  61. numpy-1.10.0.post2/numpy/core/__init__.py +89 -0
  62. numpy-1.10.0.post2/numpy/core/_internal.py +761 -0
  63. numpy-1.10.0.post2/numpy/core/_methods.py +133 -0
  64. numpy-1.10.0.post2/numpy/core/arrayprint.py +760 -0
  65. numpy-1.10.0.post2/numpy/core/code_generators/cversions.txt +34 -0
  66. numpy-1.10.0.post2/numpy/core/code_generators/generate_ufunc_api.py +219 -0
  67. numpy-1.10.0.post2/numpy/core/code_generators/generate_umath.py +1017 -0
  68. numpy-1.10.0.post2/numpy/core/code_generators/numpy_api.py +415 -0
  69. numpy-1.10.0.post2/numpy/core/code_generators/ufunc_docstrings.py +3442 -0
  70. numpy-1.10.0.post2/numpy/core/defchararray.py +2689 -0
  71. numpy-1.10.0.post2/numpy/core/fromnumeric.py +3089 -0
  72. numpy-1.10.0.post2/numpy/core/function_base.py +203 -0
  73. numpy-1.10.0.post2/numpy/core/getlimits.py +308 -0
  74. numpy-1.10.0.post2/numpy/core/include/numpy/ndarrayobject.h +246 -0
  75. numpy-1.10.0.post2/numpy/core/include/numpy/ndarraytypes.h +1797 -0
  76. numpy-1.10.0.post2/numpy/core/include/numpy/npy_3kcompat.h +448 -0
  77. numpy-1.10.0.post2/numpy/core/include/numpy/npy_common.h +1051 -0
  78. numpy-1.10.0.post2/numpy/core/include/numpy/npy_cpu.h +92 -0
  79. numpy-1.10.0.post2/numpy/core/include/numpy/npy_endian.h +61 -0
  80. numpy-1.10.0.post2/numpy/core/include/numpy/npy_math.h +525 -0
  81. numpy-1.10.0.post2/numpy/core/include/numpy/numpyconfig.h +36 -0
  82. numpy-1.10.0.post2/numpy/core/machar.py +342 -0
  83. numpy-1.10.0.post2/numpy/core/memmap.py +311 -0
  84. numpy-1.10.0.post2/numpy/core/numeric.py +2893 -0
  85. numpy-1.10.0.post2/numpy/core/numerictypes.py +1036 -0
  86. numpy-1.10.0.post2/numpy/core/records.py +846 -0
  87. numpy-1.10.0.post2/numpy/core/setup.py +983 -0
  88. numpy-1.10.0.post2/numpy/core/setup_common.py +352 -0
  89. numpy-1.10.0.post2/numpy/core/shape_base.py +350 -0
  90. numpy-1.10.0.post2/numpy/core/src/multiarray/alloc.c +244 -0
  91. numpy-1.10.0.post2/numpy/core/src/multiarray/arrayobject.c +1858 -0
  92. numpy-1.10.0.post2/numpy/core/src/multiarray/arraytypes.c.src +4738 -0
  93. numpy-1.10.0.post2/numpy/core/src/multiarray/arraytypes.h +37 -0
  94. numpy-1.10.0.post2/numpy/core/src/multiarray/buffer.c +981 -0
  95. numpy-1.10.0.post2/numpy/core/src/multiarray/calculation.c +1224 -0
  96. numpy-1.10.0.post2/numpy/core/src/multiarray/cblasfuncs.c +812 -0
  97. numpy-1.10.0.post2/numpy/core/src/multiarray/cblasfuncs.h +10 -0
  98. numpy-1.10.0.post2/numpy/core/src/multiarray/common.c +911 -0
  99. numpy-1.10.0.post2/numpy/core/src/multiarray/common.h +250 -0
  100. numpy-1.10.0.post2/numpy/core/src/multiarray/compiled_base.c +1664 -0
  101. numpy-1.10.0.post2/numpy/core/src/multiarray/compiled_base.h +24 -0
  102. numpy-1.10.0.post2/numpy/core/src/multiarray/conversion_utils.c +1217 -0
  103. numpy-1.10.0.post2/numpy/core/src/multiarray/convert.c +590 -0
  104. numpy-1.10.0.post2/numpy/core/src/multiarray/convert_datatype.c +2155 -0
  105. numpy-1.10.0.post2/numpy/core/src/multiarray/ctors.c +3838 -0
  106. numpy-1.10.0.post2/numpy/core/src/multiarray/datetime.c +3821 -0
  107. numpy-1.10.0.post2/numpy/core/src/multiarray/datetime_busday.c +1322 -0
  108. numpy-1.10.0.post2/numpy/core/src/multiarray/datetime_busdaycal.c +552 -0
  109. numpy-1.10.0.post2/numpy/core/src/multiarray/datetime_strings.c +1772 -0
  110. numpy-1.10.0.post2/numpy/core/src/multiarray/descriptor.c +3719 -0
  111. numpy-1.10.0.post2/numpy/core/src/multiarray/dtype_transfer.c +4239 -0
  112. numpy-1.10.0.post2/numpy/core/src/multiarray/einsum.c.src +3005 -0
  113. numpy-1.10.0.post2/numpy/core/src/multiarray/getset.c +986 -0
  114. numpy-1.10.0.post2/numpy/core/src/multiarray/hashdescr.c +318 -0
  115. numpy-1.10.0.post2/numpy/core/src/multiarray/item_selection.c +2413 -0
  116. numpy-1.10.0.post2/numpy/core/src/multiarray/iterators.c +2192 -0
  117. numpy-1.10.0.post2/numpy/core/src/multiarray/lowlevel_strided_loops.c.src +1769 -0
  118. numpy-1.10.0.post2/numpy/core/src/multiarray/mapping.c +3380 -0
  119. numpy-1.10.0.post2/numpy/core/src/multiarray/mapping.h +77 -0
  120. numpy-1.10.0.post2/numpy/core/src/multiarray/methods.c +2514 -0
  121. numpy-1.10.0.post2/numpy/core/src/multiarray/multiarray_tests.c.src +1035 -0
  122. numpy-1.10.0.post2/numpy/core/src/multiarray/multiarraymodule.c +4628 -0
  123. numpy-1.10.0.post2/numpy/core/src/multiarray/multiarraymodule.h +15 -0
  124. numpy-1.10.0.post2/numpy/core/src/multiarray/nditer_api.c +2809 -0
  125. numpy-1.10.0.post2/numpy/core/src/multiarray/nditer_constr.c +3160 -0
  126. numpy-1.10.0.post2/numpy/core/src/multiarray/nditer_pywrap.c +2499 -0
  127. numpy-1.10.0.post2/numpy/core/src/multiarray/number.c +1106 -0
  128. numpy-1.10.0.post2/numpy/core/src/multiarray/number.h +77 -0
  129. numpy-1.10.0.post2/numpy/core/src/multiarray/numpymemoryview.c +308 -0
  130. numpy-1.10.0.post2/numpy/core/src/multiarray/numpyos.c +683 -0
  131. numpy-1.10.0.post2/numpy/core/src/multiarray/scalarapi.c +870 -0
  132. numpy-1.10.0.post2/numpy/core/src/multiarray/scalartypes.c.src +4343 -0
  133. numpy-1.10.0.post2/numpy/core/src/multiarray/scalartypes.h +55 -0
  134. numpy-1.10.0.post2/numpy/core/src/multiarray/shape.c +1131 -0
  135. numpy-1.10.0.post2/numpy/core/src/multiarray/ucsnarrow.c +174 -0
  136. numpy-1.10.0.post2/numpy/core/src/multiarray/vdot.c +180 -0
  137. numpy-1.10.0.post2/numpy/core/src/multiarray/vdot.h +18 -0
  138. numpy-1.10.0.post2/numpy/core/src/npymath/ieee754.c.src +808 -0
  139. numpy-1.10.0.post2/numpy/core/src/npymath/npy_math.c.src +597 -0
  140. numpy-1.10.0.post2/numpy/core/src/npymath/npy_math_complex.c.src +1788 -0
  141. numpy-1.10.0.post2/numpy/core/src/npymath/npy_math_private.h +544 -0
  142. numpy-1.10.0.post2/numpy/core/src/npysort/heapsort.c.src +402 -0
  143. numpy-1.10.0.post2/numpy/core/src/npysort/mergesort.c.src +488 -0
  144. numpy-1.10.0.post2/numpy/core/src/npysort/npysort_common.h +360 -0
  145. numpy-1.10.0.post2/numpy/core/src/npysort/quicksort.c.src +523 -0
  146. numpy-1.10.0.post2/numpy/core/src/npysort/selection.c.src +426 -0
  147. numpy-1.10.0.post2/numpy/core/src/private/npy_cblas.h +584 -0
  148. numpy-1.10.0.post2/numpy/core/src/private/npy_config.h +101 -0
  149. numpy-1.10.0.post2/numpy/core/src/private/npy_import.h +32 -0
  150. numpy-1.10.0.post2/numpy/core/src/private/npy_partition.h.src +122 -0
  151. numpy-1.10.0.post2/numpy/core/src/private/npy_sort.h +196 -0
  152. numpy-1.10.0.post2/numpy/core/src/private/templ_common.h.src +43 -0
  153. numpy-1.10.0.post2/numpy/core/src/private/ufunc_override.h +397 -0
  154. numpy-1.10.0.post2/numpy/core/src/umath/funcs.inc.src +356 -0
  155. numpy-1.10.0.post2/numpy/core/src/umath/loops.c.src +2675 -0
  156. numpy-1.10.0.post2/numpy/core/src/umath/loops.h.src +497 -0
  157. numpy-1.10.0.post2/numpy/core/src/umath/operand_flag_tests.c.src +105 -0
  158. numpy-1.10.0.post2/numpy/core/src/umath/scalarmath.c.src +1738 -0
  159. numpy-1.10.0.post2/numpy/core/src/umath/simd.inc.src +903 -0
  160. numpy-1.10.0.post2/numpy/core/src/umath/test_rational.c.src +1404 -0
  161. numpy-1.10.0.post2/numpy/core/src/umath/ufunc_object.c +5703 -0
  162. numpy-1.10.0.post2/numpy/core/src/umath/ufunc_type_resolution.c +2159 -0
  163. numpy-1.10.0.post2/numpy/core/src/umath/umath_tests.c.src +392 -0
  164. numpy-1.10.0.post2/numpy/core/src/umath/umathmodule.c +443 -0
  165. numpy-1.10.0.post2/numpy/core/tests/test_abc.py +47 -0
  166. numpy-1.10.0.post2/numpy/core/tests/test_api.py +515 -0
  167. numpy-1.10.0.post2/numpy/core/tests/test_arrayprint.py +171 -0
  168. numpy-1.10.0.post2/numpy/core/tests/test_datetime.py +1820 -0
  169. numpy-1.10.0.post2/numpy/core/tests/test_defchararray.py +703 -0
  170. numpy-1.10.0.post2/numpy/core/tests/test_deprecations.py +619 -0
  171. numpy-1.10.0.post2/numpy/core/tests/test_dtype.py +578 -0
  172. numpy-1.10.0.post2/numpy/core/tests/test_einsum.py +627 -0
  173. numpy-1.10.0.post2/numpy/core/tests/test_errstate.py +52 -0
  174. numpy-1.10.0.post2/numpy/core/tests/test_function_base.py +142 -0
  175. numpy-1.10.0.post2/numpy/core/tests/test_getlimits.py +77 -0
  176. numpy-1.10.0.post2/numpy/core/tests/test_half.py +436 -0
  177. numpy-1.10.0.post2/numpy/core/tests/test_indexerrors.py +126 -0
  178. numpy-1.10.0.post2/numpy/core/tests/test_indexing.py +1047 -0
  179. numpy-1.10.0.post2/numpy/core/tests/test_item_selection.py +73 -0
  180. numpy-1.10.0.post2/numpy/core/tests/test_machar.py +29 -0
  181. numpy-1.10.0.post2/numpy/core/tests/test_memmap.py +130 -0
  182. numpy-1.10.0.post2/numpy/core/tests/test_multiarray.py +5924 -0
  183. numpy-1.10.0.post2/numpy/core/tests/test_multiarray_assignment.py +84 -0
  184. numpy-1.10.0.post2/numpy/core/tests/test_nditer.py +2638 -0
  185. numpy-1.10.0.post2/numpy/core/tests/test_numeric.py +2204 -0
  186. numpy-1.10.0.post2/numpy/core/tests/test_numerictypes.py +382 -0
  187. numpy-1.10.0.post2/numpy/core/tests/test_print.py +248 -0
  188. numpy-1.10.0.post2/numpy/core/tests/test_records.py +299 -0
  189. numpy-1.10.0.post2/numpy/core/tests/test_regression.py +2177 -0
  190. numpy-1.10.0.post2/numpy/core/tests/test_scalarinherit.py +41 -0
  191. numpy-1.10.0.post2/numpy/core/tests/test_scalarmath.py +316 -0
  192. numpy-1.10.0.post2/numpy/core/tests/test_shape_base.py +319 -0
  193. numpy-1.10.0.post2/numpy/core/tests/test_ufunc.py +1227 -0
  194. numpy-1.10.0.post2/numpy/core/tests/test_umath.py +1933 -0
  195. numpy-1.10.0.post2/numpy/core/tests/test_umath_complex.py +538 -0
  196. numpy-1.10.0.post2/numpy/core/tests/test_unicode.py +360 -0
  197. numpy-1.10.0.post2/numpy/distutils/__init__.py +23 -0
  198. numpy-1.10.0.post2/numpy/distutils/ccompiler.py +690 -0
  199. numpy-1.10.0.post2/numpy/distutils/command/autodist.py +94 -0
  200. numpy-1.10.0.post2/numpy/distutils/command/build.py +47 -0
  201. numpy-1.10.0.post2/numpy/distutils/command/build_clib.py +295 -0
  202. numpy-1.10.0.post2/numpy/distutils/command/build_ext.py +522 -0
  203. numpy-1.10.0.post2/numpy/distutils/command/config.py +437 -0
  204. numpy-1.10.0.post2/numpy/distutils/exec_command.py +651 -0
  205. numpy-1.10.0.post2/numpy/distutils/fcompiler/compaq.py +128 -0
  206. numpy-1.10.0.post2/numpy/distutils/fcompiler/gnu.py +403 -0
  207. numpy-1.10.0.post2/numpy/distutils/fcompiler/intel.py +217 -0
  208. numpy-1.10.0.post2/numpy/distutils/fcompiler/pg.py +63 -0
  209. numpy-1.10.0.post2/numpy/distutils/fcompiler/sun.py +55 -0
  210. numpy-1.10.0.post2/numpy/distutils/intelccompiler.py +95 -0
  211. numpy-1.10.0.post2/numpy/distutils/lib2def.py +116 -0
  212. numpy-1.10.0.post2/numpy/distutils/mingw32ccompiler.py +599 -0
  213. numpy-1.10.0.post2/numpy/distutils/misc_util.py +2306 -0
  214. numpy-1.10.0.post2/numpy/distutils/msvc9compiler.py +23 -0
  215. numpy-1.10.0.post2/numpy/distutils/msvccompiler.py +17 -0
  216. numpy-1.10.0.post2/numpy/distutils/npy_pkg_config.py +451 -0
  217. numpy-1.10.0.post2/numpy/distutils/system_info.py +2397 -0
  218. numpy-1.10.0.post2/numpy/distutils/tests/f2py_ext/tests/test_fib2.py +12 -0
  219. numpy-1.10.0.post2/numpy/distutils/tests/f2py_f90_ext/tests/test_foo.py +11 -0
  220. numpy-1.10.0.post2/numpy/distutils/tests/gen_ext/tests/test_fib3.py +11 -0
  221. numpy-1.10.0.post2/numpy/distutils/tests/pyrex_ext/tests/test_primes.py +13 -0
  222. numpy-1.10.0.post2/numpy/distutils/tests/swig_ext/__init__.py +1 -0
  223. numpy-1.10.0.post2/numpy/distutils/tests/swig_ext/tests/test_example.py +17 -0
  224. numpy-1.10.0.post2/numpy/distutils/tests/swig_ext/tests/test_example2.py +15 -0
  225. numpy-1.10.0.post2/numpy/distutils/tests/test_fcompiler_gnu.py +60 -0
  226. numpy-1.10.0.post2/numpy/distutils/tests/test_fcompiler_intel.py +36 -0
  227. numpy-1.10.0.post2/numpy/distutils/tests/test_misc_util.py +79 -0
  228. numpy-1.10.0.post2/numpy/distutils/tests/test_npy_pkg_config.py +102 -0
  229. numpy-1.10.0.post2/numpy/distutils/tests/test_system_info.py +209 -0
  230. numpy-1.10.0.post2/numpy/distutils/unixccompiler.py +125 -0
  231. numpy-1.10.0.post2/numpy/doc/byteswapping.py +156 -0
  232. numpy-1.10.0.post2/numpy/doc/creation.py +144 -0
  233. numpy-1.10.0.post2/numpy/doc/glossary.py +423 -0
  234. numpy-1.10.0.post2/numpy/doc/indexing.py +439 -0
  235. numpy-1.10.0.post2/numpy/doc/structured_arrays.py +290 -0
  236. numpy-1.10.0.post2/numpy/f2py/__init__.py +49 -0
  237. numpy-1.10.0.post2/numpy/f2py/__main__.py +25 -0
  238. numpy-1.10.0.post2/numpy/f2py/auxfuncs.py +858 -0
  239. numpy-1.10.0.post2/numpy/f2py/capi_maps.py +851 -0
  240. numpy-1.10.0.post2/numpy/f2py/cb_rules.py +554 -0
  241. numpy-1.10.0.post2/numpy/f2py/cfuncs.py +1261 -0
  242. numpy-1.10.0.post2/numpy/f2py/common_rules.py +150 -0
  243. numpy-1.10.0.post2/numpy/f2py/crackfortran.py +3314 -0
  244. numpy-1.10.0.post2/numpy/f2py/diagnose.py +156 -0
  245. numpy-1.10.0.post2/numpy/f2py/f2py2e.py +656 -0
  246. numpy-1.10.0.post2/numpy/f2py/f2py_testing.py +48 -0
  247. numpy-1.10.0.post2/numpy/f2py/f90mod_rules.py +272 -0
  248. numpy-1.10.0.post2/numpy/f2py/func2subr.py +299 -0
  249. numpy-1.10.0.post2/numpy/f2py/rules.py +1475 -0
  250. numpy-1.10.0.post2/numpy/f2py/setup.py +117 -0
  251. numpy-1.10.0.post2/numpy/f2py/src/fortranobject.c +1037 -0
  252. numpy-1.10.0.post2/numpy/f2py/src/fortranobject.h +162 -0
  253. numpy-1.10.0.post2/numpy/f2py/tests/src/array_from_pyobj/wrapmodule.c +223 -0
  254. numpy-1.10.0.post2/numpy/f2py/tests/test_array_from_pyobj.py +593 -0
  255. numpy-1.10.0.post2/numpy/f2py/tests/test_assumed_shape.py +35 -0
  256. numpy-1.10.0.post2/numpy/f2py/tests/test_callback.py +136 -0
  257. numpy-1.10.0.post2/numpy/f2py/tests/test_kind.py +36 -0
  258. numpy-1.10.0.post2/numpy/f2py/tests/test_mixed.py +40 -0
  259. numpy-1.10.0.post2/numpy/f2py/tests/test_regression.py +34 -0
  260. numpy-1.10.0.post2/numpy/f2py/tests/test_return_character.py +148 -0
  261. numpy-1.10.0.post2/numpy/f2py/tests/test_return_complex.py +170 -0
  262. numpy-1.10.0.post2/numpy/f2py/tests/test_return_integer.py +180 -0
  263. numpy-1.10.0.post2/numpy/f2py/tests/test_return_logical.py +189 -0
  264. numpy-1.10.0.post2/numpy/f2py/tests/test_return_real.py +206 -0
  265. numpy-1.10.0.post2/numpy/f2py/tests/test_size.py +44 -0
  266. numpy-1.10.0.post2/numpy/f2py/tests/util.py +367 -0
  267. numpy-1.10.0.post2/numpy/f2py/use_rules.py +115 -0
  268. numpy-1.10.0.post2/numpy/fft/fftpack.c +1501 -0
  269. numpy-1.10.0.post2/numpy/fft/fftpack.h +28 -0
  270. numpy-1.10.0.post2/numpy/fft/fftpack.py +1241 -0
  271. numpy-1.10.0.post2/numpy/fft/fftpack_litemodule.c +363 -0
  272. numpy-1.10.0.post2/numpy/fft/info.py +187 -0
  273. numpy-1.10.0.post2/numpy/fft/setup.py +19 -0
  274. numpy-1.10.0.post2/numpy/fft/tests/test_fftpack.py +166 -0
  275. numpy-1.10.0.post2/numpy/fft/tests/test_helper.py +78 -0
  276. numpy-1.10.0.post2/numpy/lib/_iotools.py +917 -0
  277. numpy-1.10.0.post2/numpy/lib/arraypad.py +1497 -0
  278. numpy-1.10.0.post2/numpy/lib/arraysetops.py +480 -0
  279. numpy-1.10.0.post2/numpy/lib/arrayterator.py +226 -0
  280. numpy-1.10.0.post2/numpy/lib/financial.py +737 -0
  281. numpy-1.10.0.post2/numpy/lib/format.py +814 -0
  282. numpy-1.10.0.post2/numpy/lib/function_base.py +4150 -0
  283. numpy-1.10.0.post2/numpy/lib/index_tricks.py +874 -0
  284. numpy-1.10.0.post2/numpy/lib/info.py +152 -0
  285. numpy-1.10.0.post2/numpy/lib/nanfunctions.py +1237 -0
  286. numpy-1.10.0.post2/numpy/lib/npyio.py +1992 -0
  287. numpy-1.10.0.post2/numpy/lib/polynomial.py +1277 -0
  288. numpy-1.10.0.post2/numpy/lib/recfunctions.py +1003 -0
  289. numpy-1.10.0.post2/numpy/lib/setup.py +12 -0
  290. numpy-1.10.0.post2/numpy/lib/shape_base.py +872 -0
  291. numpy-1.10.0.post2/numpy/lib/stride_tricks.py +200 -0
  292. numpy-1.10.0.post2/numpy/lib/tests/data/py2-objarr.npy +0 -0
  293. numpy-1.10.0.post2/numpy/lib/tests/data/py2-objarr.npz +0 -0
  294. numpy-1.10.0.post2/numpy/lib/tests/data/py3-objarr.npy +0 -0
  295. numpy-1.10.0.post2/numpy/lib/tests/data/py3-objarr.npz +0 -0
  296. numpy-1.10.0.post2/numpy/lib/tests/test__iotools.py +348 -0
  297. numpy-1.10.0.post2/numpy/lib/tests/test__version.py +70 -0
  298. numpy-1.10.0.post2/numpy/lib/tests/test_arraypad.py +1047 -0
  299. numpy-1.10.0.post2/numpy/lib/tests/test_arraysetops.py +309 -0
  300. numpy-1.10.0.post2/numpy/lib/tests/test_financial.py +163 -0
  301. numpy-1.10.0.post2/numpy/lib/tests/test_format.py +841 -0
  302. numpy-1.10.0.post2/numpy/lib/tests/test_function_base.py +2555 -0
  303. numpy-1.10.0.post2/numpy/lib/tests/test_index_tricks.py +326 -0
  304. numpy-1.10.0.post2/numpy/lib/tests/test_io.py +1916 -0
  305. numpy-1.10.0.post2/numpy/lib/tests/test_nanfunctions.py +707 -0
  306. numpy-1.10.0.post2/numpy/lib/tests/test_packbits.py +26 -0
  307. numpy-1.10.0.post2/numpy/lib/tests/test_polynomial.py +188 -0
  308. numpy-1.10.0.post2/numpy/lib/tests/test_recfunctions.py +734 -0
  309. numpy-1.10.0.post2/numpy/lib/tests/test_shape_base.py +386 -0
  310. numpy-1.10.0.post2/numpy/lib/tests/test_stride_tricks.py +405 -0
  311. numpy-1.10.0.post2/numpy/lib/tests/test_twodim_base.py +535 -0
  312. numpy-1.10.0.post2/numpy/lib/tests/test_type_check.py +332 -0
  313. numpy-1.10.0.post2/numpy/lib/twodim_base.py +1007 -0
  314. numpy-1.10.0.post2/numpy/lib/type_check.py +596 -0
  315. numpy-1.10.0.post2/numpy/lib/utils.py +1122 -0
  316. numpy-1.10.0.post2/numpy/linalg/lapack_lite/python_xerbla.c +46 -0
  317. numpy-1.10.0.post2/numpy/linalg/lapack_litemodule.c +358 -0
  318. numpy-1.10.0.post2/numpy/linalg/linalg.py +2406 -0
  319. numpy-1.10.0.post2/numpy/linalg/tests/test_build.py +59 -0
  320. numpy-1.10.0.post2/numpy/linalg/tests/test_linalg.py +1351 -0
  321. numpy-1.10.0.post2/numpy/linalg/tests/test_regression.py +95 -0
  322. numpy-1.10.0.post2/numpy/linalg/umath_linalg.c.src +3236 -0
  323. numpy-1.10.0.post2/numpy/ma/__init__.py +56 -0
  324. numpy-1.10.0.post2/numpy/ma/bench.py +131 -0
  325. numpy-1.10.0.post2/numpy/ma/core.py +7608 -0
  326. numpy-1.10.0.post2/numpy/ma/extras.py +1953 -0
  327. numpy-1.10.0.post2/numpy/ma/mrecords.py +796 -0
  328. numpy-1.10.0.post2/numpy/ma/setup.py +13 -0
  329. numpy-1.10.0.post2/numpy/ma/tests/test_core.py +4100 -0
  330. numpy-1.10.0.post2/numpy/ma/tests/test_extras.py +1132 -0
  331. numpy-1.10.0.post2/numpy/ma/tests/test_mrecords.py +520 -0
  332. numpy-1.10.0.post2/numpy/ma/tests/test_old_ma.py +879 -0
  333. numpy-1.10.0.post2/numpy/ma/tests/test_regression.py +80 -0
  334. numpy-1.10.0.post2/numpy/ma/tests/test_subclassing.py +338 -0
  335. numpy-1.10.0.post2/numpy/ma/testutils.py +289 -0
  336. numpy-1.10.0.post2/numpy/ma/timer_comparison.py +440 -0
  337. numpy-1.10.0.post2/numpy/matlib.py +358 -0
  338. numpy-1.10.0.post2/numpy/matrixlib/defmatrix.py +1232 -0
  339. numpy-1.10.0.post2/numpy/matrixlib/tests/test_defmatrix.py +449 -0
  340. numpy-1.10.0.post2/numpy/matrixlib/tests/test_multiarray.py +23 -0
  341. numpy-1.10.0.post2/numpy/matrixlib/tests/test_numeric.py +23 -0
  342. numpy-1.10.0.post2/numpy/matrixlib/tests/test_regression.py +37 -0
  343. numpy-1.10.0.post2/numpy/polynomial/_polybase.py +962 -0
  344. numpy-1.10.0.post2/numpy/polynomial/chebyshev.py +2056 -0
  345. numpy-1.10.0.post2/numpy/polynomial/hermite.py +1831 -0
  346. numpy-1.10.0.post2/numpy/polynomial/hermite_e.py +1828 -0
  347. numpy-1.10.0.post2/numpy/polynomial/laguerre.py +1780 -0
  348. numpy-1.10.0.post2/numpy/polynomial/legendre.py +1808 -0
  349. numpy-1.10.0.post2/numpy/polynomial/polyutils.py +403 -0
  350. numpy-1.10.0.post2/numpy/random/mtrand/distributions.c +912 -0
  351. numpy-1.10.0.post2/numpy/random/mtrand/mtrand.c +34805 -0
  352. numpy-1.10.0.post2/numpy/random/mtrand/mtrand.pyx +4766 -0
  353. numpy-1.10.0.post2/numpy/random/setup.py +61 -0
  354. numpy-1.10.0.post2/numpy/random/tests/test_random.py +723 -0
  355. numpy-1.10.0.post2/numpy/random/tests/test_regression.py +117 -0
  356. numpy-1.10.0.post2/numpy/setup.py +29 -0
  357. numpy-1.10.0.post2/numpy/testing/__init__.py +15 -0
  358. numpy-1.10.0.post2/numpy/testing/decorators.py +271 -0
  359. numpy-1.10.0.post2/numpy/testing/noseclasses.py +353 -0
  360. numpy-1.10.0.post2/numpy/testing/nosetester.py +511 -0
  361. numpy-1.10.0.post2/numpy/testing/print_coercion_tables.py +91 -0
  362. numpy-1.10.0.post2/numpy/testing/setup.py +20 -0
  363. numpy-1.10.0.post2/numpy/testing/tests/test_decorators.py +182 -0
  364. numpy-1.10.0.post2/numpy/testing/tests/test_utils.py +781 -0
  365. numpy-1.10.0.post2/numpy/testing/utils.py +1831 -0
  366. numpy-1.10.0.post2/numpy/tests/test_ctypeslib.py +106 -0
  367. numpy-1.10.0.post2/numpy/tests/test_matlib.py +55 -0
  368. numpy-1.10.0.post2/numpy/tests/test_scripts.py +69 -0
  369. numpy-1.10.0.post2/numpy/version.py +10 -0
  370. numpy-1.10.0.post2/setup.py +260 -0
  371. numpy-1.10.0.post2/site.cfg.example +193 -0
  372. numpy-1.10.0.post2/tmp.txt +789 -0
  373. numpy-1.10.0.post2/tools/swig/README +145 -0
  374. numpy-1.10.0.post2/tools/swig/numpy.i +3161 -0
  375. numpy-1.10.0.post2/tools/swig/test/Array.i +135 -0
  376. numpy-1.10.0.post2/tools/swig/test/ArrayZ.cxx +131 -0
  377. numpy-1.10.0.post2/tools/swig/test/ArrayZ.h +56 -0
  378. numpy-1.10.0.post2/tools/swig/test/Flat.cxx +36 -0
  379. numpy-1.10.0.post2/tools/swig/test/Flat.h +34 -0
  380. numpy-1.10.0.post2/tools/swig/test/Flat.i +36 -0
  381. numpy-1.10.0.post2/tools/swig/test/Makefile +37 -0
  382. numpy-1.10.0.post2/tools/swig/test/setup.py +71 -0
  383. numpy-1.10.0.post2/tools/swig/test/testArray.py +385 -0
  384. numpy-1.10.0.post2/tools/swig/test/testFarray.py +159 -0
  385. numpy-1.10.0.post2/tools/swig/test/testFlat.py +200 -0
  386. numpy-1.10.0.post2/tools/swig/test/testFortran.py +173 -0
  387. numpy-1.10.0.post2/tools/swig/test/testMatrix.py +362 -0
  388. numpy-1.10.0.post2/tools/swig/test/testSuperTensor.py +388 -0
  389. numpy-1.10.0.post2/tools/swig/test/testTensor.py +402 -0
  390. numpy-1.10.0.post2/tools/swig/test/testVector.py +381 -0
  391. numpy-1.9.3/INSTALL.txt +0 -138
  392. numpy-1.9.3/LICENSE.txt +0 -30
  393. numpy-1.9.3/MANIFEST.in +0 -26
  394. numpy-1.9.3/PKG-INFO +0 -39
  395. numpy-1.9.3/doc/release/1.9.3-notes.rst +0 -23
  396. numpy-1.9.3/doc/source/conf.py +0 -331
  397. numpy-1.9.3/doc/source/dev/gitwash/branch_list.png +0 -0
  398. numpy-1.9.3/doc/source/dev/gitwash/branch_list_compare.png +0 -0
  399. numpy-1.9.3/doc/source/dev/gitwash/development_workflow.rst +0 -568
  400. numpy-1.9.3/doc/source/dev/gitwash/git_links.inc +0 -88
  401. numpy-1.9.3/doc/source/dev/gitwash/index.rst +0 -14
  402. numpy-1.9.3/doc/source/dev/index.rst +0 -10
  403. numpy-1.9.3/doc/source/reference/arrays.classes.rst +0 -427
  404. numpy-1.9.3/doc/source/reference/arrays.dtypes.rst +0 -534
  405. numpy-1.9.3/doc/source/reference/arrays.indexing.rst +0 -550
  406. numpy-1.9.3/doc/source/reference/arrays.interface.rst +0 -336
  407. numpy-1.9.3/doc/source/reference/arrays.ndarray.rst +0 -609
  408. numpy-1.9.3/doc/source/reference/arrays.scalars.rst +0 -291
  409. numpy-1.9.3/doc/source/reference/c-api.array.rst +0 -3362
  410. numpy-1.9.3/doc/source/reference/c-api.config.rst +0 -103
  411. numpy-1.9.3/doc/source/reference/c-api.coremath.rst +0 -420
  412. numpy-1.9.3/doc/source/reference/c-api.dtype.rst +0 -376
  413. numpy-1.9.3/doc/source/reference/c-api.generalized-ufuncs.rst +0 -171
  414. numpy-1.9.3/doc/source/reference/c-api.iterator.rst +0 -1298
  415. numpy-1.9.3/doc/source/reference/c-api.types-and-structures.rst +0 -1204
  416. numpy-1.9.3/doc/source/reference/c-api.ufunc.rst +0 -399
  417. numpy-1.9.3/doc/source/reference/index.rst +0 -44
  418. numpy-1.9.3/doc/source/reference/internals.code-explanations.rst +0 -666
  419. numpy-1.9.3/doc/source/reference/routines.array-manipulation.rst +0 -113
  420. numpy-1.9.3/doc/source/reference/routines.io.rst +0 -74
  421. numpy-1.9.3/doc/source/reference/routines.linalg.rst +0 -88
  422. numpy-1.9.3/doc/source/reference/routines.ma.rst +0 -405
  423. numpy-1.9.3/doc/source/reference/routines.sort.rst +0 -42
  424. numpy-1.9.3/doc/source/reference/routines.statistics.rst +0 -55
  425. numpy-1.9.3/doc/source/reference/swig.interface-file.rst +0 -1055
  426. numpy-1.9.3/doc/source/reference/swig.testing.rst +0 -166
  427. numpy-1.9.3/doc/source/reference/ufuncs.rst +0 -651
  428. numpy-1.9.3/doc/source/release.rst +0 -19
  429. numpy-1.9.3/doc/source/user/basics.io.genfromtxt.rst +0 -531
  430. numpy-1.9.3/doc/source/user/basics.rec.rst +0 -7
  431. numpy-1.9.3/doc/source/user/c-info.beyond-basics.rst +0 -560
  432. numpy-1.9.3/doc/source/user/c-info.how-to-extend.rst +0 -642
  433. numpy-1.9.3/doc/source/user/c-info.python-as-glue.rst +0 -1528
  434. numpy-1.9.3/doc/source/user/c-info.ufunc-tutorial.rst +0 -1211
  435. numpy-1.9.3/doc/source/user/install.rst +0 -180
  436. numpy-1.9.3/numpy/__init__.py +0 -216
  437. numpy-1.9.3/numpy/_import_tools.py +0 -348
  438. numpy-1.9.3/numpy/add_newdocs.py +0 -7518
  439. numpy-1.9.3/numpy/compat/_inspect.py +0 -221
  440. numpy-1.9.3/numpy/compat/py3k.py +0 -89
  441. numpy-1.9.3/numpy/compat/setup.py +0 -12
  442. numpy-1.9.3/numpy/core/__init__.py +0 -78
  443. numpy-1.9.3/numpy/core/_internal.py +0 -570
  444. numpy-1.9.3/numpy/core/_methods.py +0 -134
  445. numpy-1.9.3/numpy/core/arrayprint.py +0 -752
  446. numpy-1.9.3/numpy/core/blasdot/_dotblas.c +0 -1255
  447. numpy-1.9.3/numpy/core/blasdot/apple_sgemv_patch.c +0 -216
  448. numpy-1.9.3/numpy/core/blasdot/cblas.h +0 -578
  449. numpy-1.9.3/numpy/core/code_generators/cversions.txt +0 -31
  450. numpy-1.9.3/numpy/core/code_generators/generate_ufunc_api.py +0 -219
  451. numpy-1.9.3/numpy/core/code_generators/generate_umath.py +0 -972
  452. numpy-1.9.3/numpy/core/code_generators/numpy_api.py +0 -412
  453. numpy-1.9.3/numpy/core/code_generators/ufunc_docstrings.py +0 -3419
  454. numpy-1.9.3/numpy/core/defchararray.py +0 -2687
  455. numpy-1.9.3/numpy/core/fromnumeric.py +0 -2938
  456. numpy-1.9.3/numpy/core/function_base.py +0 -190
  457. numpy-1.9.3/numpy/core/getlimits.py +0 -306
  458. numpy-1.9.3/numpy/core/include/numpy/fenv/fenv.c +0 -38
  459. numpy-1.9.3/numpy/core/include/numpy/fenv/fenv.h +0 -224
  460. numpy-1.9.3/numpy/core/include/numpy/ndarrayobject.h +0 -237
  461. numpy-1.9.3/numpy/core/include/numpy/ndarraytypes.h +0 -1820
  462. numpy-1.9.3/numpy/core/include/numpy/npy_3kcompat.h +0 -506
  463. numpy-1.9.3/numpy/core/include/numpy/npy_common.h +0 -1038
  464. numpy-1.9.3/numpy/core/include/numpy/npy_cpu.h +0 -122
  465. numpy-1.9.3/numpy/core/include/numpy/npy_endian.h +0 -49
  466. numpy-1.9.3/numpy/core/include/numpy/npy_math.h +0 -479
  467. numpy-1.9.3/numpy/core/include/numpy/numpyconfig.h +0 -35
  468. numpy-1.9.3/numpy/core/machar.py +0 -338
  469. numpy-1.9.3/numpy/core/memmap.py +0 -308
  470. numpy-1.9.3/numpy/core/numeric.py +0 -2842
  471. numpy-1.9.3/numpy/core/numerictypes.py +0 -1042
  472. numpy-1.9.3/numpy/core/records.py +0 -804
  473. numpy-1.9.3/numpy/core/setup.py +0 -1016
  474. numpy-1.9.3/numpy/core/setup_common.py +0 -330
  475. numpy-1.9.3/numpy/core/shape_base.py +0 -277
  476. numpy-1.9.3/numpy/core/src/multiarray/alloc.c +0 -241
  477. numpy-1.9.3/numpy/core/src/multiarray/arrayobject.c +0 -1791
  478. numpy-1.9.3/numpy/core/src/multiarray/arraytypes.c.src +0 -4372
  479. numpy-1.9.3/numpy/core/src/multiarray/arraytypes.h +0 -13
  480. numpy-1.9.3/numpy/core/src/multiarray/buffer.c +0 -954
  481. numpy-1.9.3/numpy/core/src/multiarray/calculation.c +0 -1229
  482. numpy-1.9.3/numpy/core/src/multiarray/common.c +0 -798
  483. numpy-1.9.3/numpy/core/src/multiarray/common.h +0 -328
  484. numpy-1.9.3/numpy/core/src/multiarray/conversion_utils.c +0 -1240
  485. numpy-1.9.3/numpy/core/src/multiarray/convert.c +0 -589
  486. numpy-1.9.3/numpy/core/src/multiarray/convert_datatype.c +0 -2199
  487. numpy-1.9.3/numpy/core/src/multiarray/ctors.c +0 -3785
  488. numpy-1.9.3/numpy/core/src/multiarray/datetime.c +0 -3823
  489. numpy-1.9.3/numpy/core/src/multiarray/datetime_busday.c +0 -1322
  490. numpy-1.9.3/numpy/core/src/multiarray/datetime_busdaycal.c +0 -552
  491. numpy-1.9.3/numpy/core/src/multiarray/datetime_strings.c +0 -1772
  492. numpy-1.9.3/numpy/core/src/multiarray/descriptor.c +0 -3658
  493. numpy-1.9.3/numpy/core/src/multiarray/dtype_transfer.c +0 -4232
  494. numpy-1.9.3/numpy/core/src/multiarray/einsum.c.src +0 -3013
  495. numpy-1.9.3/numpy/core/src/multiarray/getset.c +0 -984
  496. numpy-1.9.3/numpy/core/src/multiarray/hashdescr.c +0 -319
  497. numpy-1.9.3/numpy/core/src/multiarray/item_selection.c +0 -2711
  498. numpy-1.9.3/numpy/core/src/multiarray/iterators.c +0 -2160
  499. numpy-1.9.3/numpy/core/src/multiarray/lowlevel_strided_loops.c.src +0 -1767
  500. numpy-1.9.3/numpy/core/src/multiarray/mapping.c +0 -3316
  501. numpy-1.9.3/numpy/core/src/multiarray/mapping.h +0 -73
  502. numpy-1.9.3/numpy/core/src/multiarray/methods.c +0 -2497
  503. numpy-1.9.3/numpy/core/src/multiarray/multiarray_tests.c.src +0 -977
  504. numpy-1.9.3/numpy/core/src/multiarray/multiarraymodule.c +0 -4200
  505. numpy-1.9.3/numpy/core/src/multiarray/multiarraymodule.h +0 -4
  506. numpy-1.9.3/numpy/core/src/multiarray/nditer_api.c +0 -2809
  507. numpy-1.9.3/numpy/core/src/multiarray/nditer_constr.c +0 -3159
  508. numpy-1.9.3/numpy/core/src/multiarray/nditer_pywrap.c +0 -2492
  509. numpy-1.9.3/numpy/core/src/multiarray/number.c +0 -1057
  510. numpy-1.9.3/numpy/core/src/multiarray/number.h +0 -76
  511. numpy-1.9.3/numpy/core/src/multiarray/numpymemoryview.c +0 -309
  512. numpy-1.9.3/numpy/core/src/multiarray/numpyos.c +0 -683
  513. numpy-1.9.3/numpy/core/src/multiarray/scalarapi.c +0 -861
  514. numpy-1.9.3/numpy/core/src/multiarray/scalartypes.c.src +0 -4270
  515. numpy-1.9.3/numpy/core/src/multiarray/scalartypes.h +0 -52
  516. numpy-1.9.3/numpy/core/src/multiarray/shape.c +0 -1141
  517. numpy-1.9.3/numpy/core/src/multiarray/ucsnarrow.c +0 -173
  518. numpy-1.9.3/numpy/core/src/npymath/ieee754.c.src +0 -814
  519. numpy-1.9.3/numpy/core/src/npymath/npy_math.c.src +0 -527
  520. numpy-1.9.3/numpy/core/src/npymath/npy_math_complex.c.src +0 -291
  521. numpy-1.9.3/numpy/core/src/npymath/npy_math_private.h +0 -539
  522. numpy-1.9.3/numpy/core/src/npysort/heapsort.c.src +0 -341
  523. numpy-1.9.3/numpy/core/src/npysort/mergesort.c.src +0 -428
  524. numpy-1.9.3/numpy/core/src/npysort/npysort_common.h +0 -367
  525. numpy-1.9.3/numpy/core/src/npysort/quicksort.c.src +0 -363
  526. numpy-1.9.3/numpy/core/src/npysort/selection.c.src +0 -474
  527. numpy-1.9.3/numpy/core/src/private/npy_config.h +0 -68
  528. numpy-1.9.3/numpy/core/src/private/npy_partition.h.src +0 -138
  529. numpy-1.9.3/numpy/core/src/private/npy_sort.h +0 -194
  530. numpy-1.9.3/numpy/core/src/private/scalarmathmodule.h.src +0 -42
  531. numpy-1.9.3/numpy/core/src/private/ufunc_override.h +0 -384
  532. numpy-1.9.3/numpy/core/src/scalarmathmodule.c.src +0 -1980
  533. numpy-1.9.3/numpy/core/src/umath/funcs.inc.src +0 -715
  534. numpy-1.9.3/numpy/core/src/umath/loops.c.src +0 -2654
  535. numpy-1.9.3/numpy/core/src/umath/loops.h.src +0 -501
  536. numpy-1.9.3/numpy/core/src/umath/operand_flag_tests.c.src +0 -105
  537. numpy-1.9.3/numpy/core/src/umath/simd.inc.src +0 -881
  538. numpy-1.9.3/numpy/core/src/umath/test_rational.c.src +0 -1404
  539. numpy-1.9.3/numpy/core/src/umath/ufunc_object.c +0 -5520
  540. numpy-1.9.3/numpy/core/src/umath/ufunc_type_resolution.c +0 -2164
  541. numpy-1.9.3/numpy/core/src/umath/umath_tests.c.src +0 -341
  542. numpy-1.9.3/numpy/core/src/umath/umathmodule.c +0 -561
  543. numpy-1.9.3/numpy/core/tests/test_abc.py +0 -45
  544. numpy-1.9.3/numpy/core/tests/test_api.py +0 -514
  545. numpy-1.9.3/numpy/core/tests/test_arrayprint.py +0 -167
  546. numpy-1.9.3/numpy/core/tests/test_blasdot.py +0 -249
  547. numpy-1.9.3/numpy/core/tests/test_datetime.py +0 -1781
  548. numpy-1.9.3/numpy/core/tests/test_defchararray.py +0 -642
  549. numpy-1.9.3/numpy/core/tests/test_deprecations.py +0 -512
  550. numpy-1.9.3/numpy/core/tests/test_dtype.py +0 -542
  551. numpy-1.9.3/numpy/core/tests/test_einsum.py +0 -583
  552. numpy-1.9.3/numpy/core/tests/test_errstate.py +0 -51
  553. numpy-1.9.3/numpy/core/tests/test_function_base.py +0 -111
  554. numpy-1.9.3/numpy/core/tests/test_getlimits.py +0 -86
  555. numpy-1.9.3/numpy/core/tests/test_half.py +0 -439
  556. numpy-1.9.3/numpy/core/tests/test_indexerrors.py +0 -127
  557. numpy-1.9.3/numpy/core/tests/test_indexing.py +0 -1014
  558. numpy-1.9.3/numpy/core/tests/test_item_selection.py +0 -70
  559. numpy-1.9.3/numpy/core/tests/test_machar.py +0 -30
  560. numpy-1.9.3/numpy/core/tests/test_memmap.py +0 -127
  561. numpy-1.9.3/numpy/core/tests/test_multiarray.py +0 -4645
  562. numpy-1.9.3/numpy/core/tests/test_multiarray_assignment.py +0 -80
  563. numpy-1.9.3/numpy/core/tests/test_nditer.py +0 -2630
  564. numpy-1.9.3/numpy/core/tests/test_numeric.py +0 -2117
  565. numpy-1.9.3/numpy/core/tests/test_numerictypes.py +0 -377
  566. numpy-1.9.3/numpy/core/tests/test_print.py +0 -245
  567. numpy-1.9.3/numpy/core/tests/test_records.py +0 -185
  568. numpy-1.9.3/numpy/core/tests/test_regression.py +0 -2115
  569. numpy-1.9.3/numpy/core/tests/test_scalarinherit.py +0 -34
  570. numpy-1.9.3/numpy/core/tests/test_scalarmath.py +0 -275
  571. numpy-1.9.3/numpy/core/tests/test_shape_base.py +0 -250
  572. numpy-1.9.3/numpy/core/tests/test_ufunc.py +0 -1153
  573. numpy-1.9.3/numpy/core/tests/test_umath.py +0 -1695
  574. numpy-1.9.3/numpy/core/tests/test_umath_complex.py +0 -537
  575. numpy-1.9.3/numpy/core/tests/test_unicode.py +0 -357
  576. numpy-1.9.3/numpy/distutils/__init__.py +0 -39
  577. numpy-1.9.3/numpy/distutils/ccompiler.py +0 -656
  578. numpy-1.9.3/numpy/distutils/command/autodist.py +0 -43
  579. numpy-1.9.3/numpy/distutils/command/build.py +0 -39
  580. numpy-1.9.3/numpy/distutils/command/build_clib.py +0 -284
  581. numpy-1.9.3/numpy/distutils/command/build_ext.py +0 -515
  582. numpy-1.9.3/numpy/distutils/command/config.py +0 -476
  583. numpy-1.9.3/numpy/distutils/exec_command.py +0 -618
  584. numpy-1.9.3/numpy/distutils/fcompiler/compaq.py +0 -128
  585. numpy-1.9.3/numpy/distutils/fcompiler/gnu.py +0 -390
  586. numpy-1.9.3/numpy/distutils/fcompiler/intel.py +0 -205
  587. numpy-1.9.3/numpy/distutils/fcompiler/pg.py +0 -60
  588. numpy-1.9.3/numpy/distutils/fcompiler/sun.py +0 -52
  589. numpy-1.9.3/numpy/distutils/intelccompiler.py +0 -45
  590. numpy-1.9.3/numpy/distutils/lib2def.py +0 -116
  591. numpy-1.9.3/numpy/distutils/mingw32ccompiler.py +0 -582
  592. numpy-1.9.3/numpy/distutils/misc_util.py +0 -2271
  593. numpy-1.9.3/numpy/distutils/npy_pkg_config.py +0 -464
  594. numpy-1.9.3/numpy/distutils/system_info.py +0 -2319
  595. numpy-1.9.3/numpy/distutils/tests/f2py_ext/tests/test_fib2.py +0 -13
  596. numpy-1.9.3/numpy/distutils/tests/f2py_f90_ext/tests/test_foo.py +0 -12
  597. numpy-1.9.3/numpy/distutils/tests/gen_ext/tests/test_fib3.py +0 -12
  598. numpy-1.9.3/numpy/distutils/tests/pyrex_ext/tests/test_primes.py +0 -14
  599. numpy-1.9.3/numpy/distutils/tests/swig_ext/tests/test_example.py +0 -18
  600. numpy-1.9.3/numpy/distutils/tests/swig_ext/tests/test_example2.py +0 -16
  601. numpy-1.9.3/numpy/distutils/tests/test_fcompiler_gnu.py +0 -53
  602. numpy-1.9.3/numpy/distutils/tests/test_fcompiler_intel.py +0 -36
  603. numpy-1.9.3/numpy/distutils/tests/test_misc_util.py +0 -75
  604. numpy-1.9.3/numpy/distutils/tests/test_npy_pkg_config.py +0 -98
  605. numpy-1.9.3/numpy/distutils/unixccompiler.py +0 -113
  606. numpy-1.9.3/numpy/doc/byteswapping.py +0 -147
  607. numpy-1.9.3/numpy/doc/creation.py +0 -144
  608. numpy-1.9.3/numpy/doc/glossary.py +0 -418
  609. numpy-1.9.3/numpy/doc/indexing.py +0 -437
  610. numpy-1.9.3/numpy/doc/structured_arrays.py +0 -223
  611. numpy-1.9.3/numpy/f2py/__init__.py +0 -49
  612. numpy-1.9.3/numpy/f2py/auxfuncs.py +0 -711
  613. numpy-1.9.3/numpy/f2py/capi_maps.py +0 -773
  614. numpy-1.9.3/numpy/f2py/cb_rules.py +0 -539
  615. numpy-1.9.3/numpy/f2py/cfuncs.py +0 -1224
  616. numpy-1.9.3/numpy/f2py/common_rules.py +0 -132
  617. numpy-1.9.3/numpy/f2py/crackfortran.py +0 -2870
  618. numpy-1.9.3/numpy/f2py/diagnose.py +0 -149
  619. numpy-1.9.3/numpy/f2py/f2py2e.py +0 -598
  620. numpy-1.9.3/numpy/f2py/f2py_testing.py +0 -46
  621. numpy-1.9.3/numpy/f2py/f90mod_rules.py +0 -246
  622. numpy-1.9.3/numpy/f2py/func2subr.py +0 -291
  623. numpy-1.9.3/numpy/f2py/rules.py +0 -1448
  624. numpy-1.9.3/numpy/f2py/setup.py +0 -129
  625. numpy-1.9.3/numpy/f2py/src/fortranobject.c +0 -972
  626. numpy-1.9.3/numpy/f2py/src/fortranobject.h +0 -162
  627. numpy-1.9.3/numpy/f2py/tests/src/array_from_pyobj/wrapmodule.c +0 -223
  628. numpy-1.9.3/numpy/f2py/tests/test_array_from_pyobj.py +0 -559
  629. numpy-1.9.3/numpy/f2py/tests/test_assumed_shape.py +0 -37
  630. numpy-1.9.3/numpy/f2py/tests/test_callback.py +0 -132
  631. numpy-1.9.3/numpy/f2py/tests/test_kind.py +0 -36
  632. numpy-1.9.3/numpy/f2py/tests/test_mixed.py +0 -41
  633. numpy-1.9.3/numpy/f2py/tests/test_regression.py +0 -32
  634. numpy-1.9.3/numpy/f2py/tests/test_return_character.py +0 -142
  635. numpy-1.9.3/numpy/f2py/tests/test_return_complex.py +0 -169
  636. numpy-1.9.3/numpy/f2py/tests/test_return_integer.py +0 -178
  637. numpy-1.9.3/numpy/f2py/tests/test_return_logical.py +0 -187
  638. numpy-1.9.3/numpy/f2py/tests/test_return_real.py +0 -203
  639. numpy-1.9.3/numpy/f2py/tests/test_size.py +0 -47
  640. numpy-1.9.3/numpy/f2py/tests/util.py +0 -353
  641. numpy-1.9.3/numpy/f2py/use_rules.py +0 -109
  642. numpy-1.9.3/numpy/fft/fftpack.c +0 -1501
  643. numpy-1.9.3/numpy/fft/fftpack.h +0 -28
  644. numpy-1.9.3/numpy/fft/fftpack.py +0 -1169
  645. numpy-1.9.3/numpy/fft/fftpack_litemodule.c +0 -371
  646. numpy-1.9.3/numpy/fft/info.py +0 -179
  647. numpy-1.9.3/numpy/fft/setup.py +0 -20
  648. numpy-1.9.3/numpy/fft/tests/test_fftpack.py +0 -75
  649. numpy-1.9.3/numpy/fft/tests/test_helper.py +0 -78
  650. numpy-1.9.3/numpy/lib/_iotools.py +0 -891
  651. numpy-1.9.3/numpy/lib/arraypad.py +0 -1475
  652. numpy-1.9.3/numpy/lib/arraysetops.py +0 -464
  653. numpy-1.9.3/numpy/lib/arrayterator.py +0 -226
  654. numpy-1.9.3/numpy/lib/financial.py +0 -737
  655. numpy-1.9.3/numpy/lib/format.py +0 -771
  656. numpy-1.9.3/numpy/lib/function_base.py +0 -3884
  657. numpy-1.9.3/numpy/lib/index_tricks.py +0 -869
  658. numpy-1.9.3/numpy/lib/info.py +0 -151
  659. numpy-1.9.3/numpy/lib/nanfunctions.py +0 -1158
  660. numpy-1.9.3/numpy/lib/npyio.py +0 -1871
  661. numpy-1.9.3/numpy/lib/polynomial.py +0 -1271
  662. numpy-1.9.3/numpy/lib/recfunctions.py +0 -1003
  663. numpy-1.9.3/numpy/lib/setup.py +0 -23
  664. numpy-1.9.3/numpy/lib/shape_base.py +0 -865
  665. numpy-1.9.3/numpy/lib/src/_compiled_base.c +0 -1761
  666. numpy-1.9.3/numpy/lib/stride_tricks.py +0 -123
  667. numpy-1.9.3/numpy/lib/tests/test__iotools.py +0 -326
  668. numpy-1.9.3/numpy/lib/tests/test__version.py +0 -57
  669. numpy-1.9.3/numpy/lib/tests/test_arraypad.py +0 -560
  670. numpy-1.9.3/numpy/lib/tests/test_arraysetops.py +0 -301
  671. numpy-1.9.3/numpy/lib/tests/test_financial.py +0 -160
  672. numpy-1.9.3/numpy/lib/tests/test_format.py +0 -716
  673. numpy-1.9.3/numpy/lib/tests/test_function_base.py +0 -2145
  674. numpy-1.9.3/numpy/lib/tests/test_index_tricks.py +0 -289
  675. numpy-1.9.3/numpy/lib/tests/test_io.py +0 -1754
  676. numpy-1.9.3/numpy/lib/tests/test_nanfunctions.py +0 -774
  677. numpy-1.9.3/numpy/lib/tests/test_polynomial.py +0 -177
  678. numpy-1.9.3/numpy/lib/tests/test_recfunctions.py +0 -705
  679. numpy-1.9.3/numpy/lib/tests/test_shape_base.py +0 -368
  680. numpy-1.9.3/numpy/lib/tests/test_stride_tricks.py +0 -238
  681. numpy-1.9.3/numpy/lib/tests/test_twodim_base.py +0 -504
  682. numpy-1.9.3/numpy/lib/tests/test_type_check.py +0 -328
  683. numpy-1.9.3/numpy/lib/twodim_base.py +0 -1003
  684. numpy-1.9.3/numpy/lib/type_check.py +0 -605
  685. numpy-1.9.3/numpy/lib/utils.py +0 -1176
  686. numpy-1.9.3/numpy/linalg/lapack_lite/python_xerbla.c +0 -47
  687. numpy-1.9.3/numpy/linalg/lapack_litemodule.c +0 -362
  688. numpy-1.9.3/numpy/linalg/linalg.py +0 -2136
  689. numpy-1.9.3/numpy/linalg/tests/test_build.py +0 -53
  690. numpy-1.9.3/numpy/linalg/tests/test_linalg.py +0 -1156
  691. numpy-1.9.3/numpy/linalg/tests/test_regression.py +0 -90
  692. numpy-1.9.3/numpy/linalg/umath_linalg.c.src +0 -3210
  693. numpy-1.9.3/numpy/ma/__init__.py +0 -58
  694. numpy-1.9.3/numpy/ma/bench.py +0 -166
  695. numpy-1.9.3/numpy/ma/core.py +0 -7374
  696. numpy-1.9.3/numpy/ma/extras.py +0 -1932
  697. numpy-1.9.3/numpy/ma/mrecords.py +0 -734
  698. numpy-1.9.3/numpy/ma/setup.py +0 -20
  699. numpy-1.9.3/numpy/ma/tests/test_core.py +0 -3706
  700. numpy-1.9.3/numpy/ma/tests/test_extras.py +0 -954
  701. numpy-1.9.3/numpy/ma/tests/test_mrecords.py +0 -521
  702. numpy-1.9.3/numpy/ma/tests/test_old_ma.py +0 -869
  703. numpy-1.9.3/numpy/ma/tests/test_regression.py +0 -75
  704. numpy-1.9.3/numpy/ma/tests/test_subclassing.py +0 -236
  705. numpy-1.9.3/numpy/ma/testutils.py +0 -240
  706. numpy-1.9.3/numpy/ma/timer_comparison.py +0 -459
  707. numpy-1.9.3/numpy/matlib.py +0 -358
  708. numpy-1.9.3/numpy/matrixlib/defmatrix.py +0 -1094
  709. numpy-1.9.3/numpy/matrixlib/tests/test_defmatrix.py +0 -400
  710. numpy-1.9.3/numpy/matrixlib/tests/test_multiarray.py +0 -18
  711. numpy-1.9.3/numpy/matrixlib/tests/test_numeric.py +0 -10
  712. numpy-1.9.3/numpy/matrixlib/tests/test_regression.py +0 -34
  713. numpy-1.9.3/numpy/polynomial/_polybase.py +0 -962
  714. numpy-1.9.3/numpy/polynomial/chebyshev.py +0 -2056
  715. numpy-1.9.3/numpy/polynomial/hermite.py +0 -1789
  716. numpy-1.9.3/numpy/polynomial/hermite_e.py +0 -1786
  717. numpy-1.9.3/numpy/polynomial/laguerre.py +0 -1781
  718. numpy-1.9.3/numpy/polynomial/legendre.py +0 -1809
  719. numpy-1.9.3/numpy/polynomial/polytemplate.py +0 -927
  720. numpy-1.9.3/numpy/polynomial/polyutils.py +0 -403
  721. numpy-1.9.3/numpy/random/mtrand/distributions.c +0 -892
  722. numpy-1.9.3/numpy/random/mtrand/mtrand.c +0 -36656
  723. numpy-1.9.3/numpy/random/mtrand/mtrand.pyx +0 -4706
  724. numpy-1.9.3/numpy/random/setup.py +0 -74
  725. numpy-1.9.3/numpy/random/tests/test_random.py +0 -707
  726. numpy-1.9.3/numpy/random/tests/test_regression.py +0 -86
  727. numpy-1.9.3/numpy/setup.py +0 -27
  728. numpy-1.9.3/numpy/testing/__init__.py +0 -16
  729. numpy-1.9.3/numpy/testing/decorators.py +0 -271
  730. numpy-1.9.3/numpy/testing/noseclasses.py +0 -353
  731. numpy-1.9.3/numpy/testing/nosetester.py +0 -504
  732. numpy-1.9.3/numpy/testing/print_coercion_tables.py +0 -89
  733. numpy-1.9.3/numpy/testing/setup.py +0 -20
  734. numpy-1.9.3/numpy/testing/tests/test_decorators.py +0 -185
  735. numpy-1.9.3/numpy/testing/tests/test_utils.py +0 -558
  736. numpy-1.9.3/numpy/testing/utils.py +0 -1715
  737. numpy-1.9.3/numpy/tests/test_ctypeslib.py +0 -102
  738. numpy-1.9.3/numpy/tests/test_matlib.py +0 -55
  739. numpy-1.9.3/numpy/version.py +0 -10
  740. numpy-1.9.3/setup.py +0 -251
  741. numpy-1.9.3/site.cfg.example +0 -157
  742. numpy-1.9.3/tools/swig/README +0 -135
  743. numpy-1.9.3/tools/swig/numpy.i +0 -3085
  744. numpy-1.9.3/tools/swig/test/Array.i +0 -102
  745. numpy-1.9.3/tools/swig/test/Makefile +0 -34
  746. numpy-1.9.3/tools/swig/test/setup.py +0 -64
  747. numpy-1.9.3/tools/swig/test/testArray.py +0 -284
  748. numpy-1.9.3/tools/swig/test/testFarray.py +0 -159
  749. numpy-1.9.3/tools/swig/test/testFortran.py +0 -173
  750. numpy-1.9.3/tools/swig/test/testMatrix.py +0 -362
  751. numpy-1.9.3/tools/swig/test/testSuperTensor.py +0 -388
  752. numpy-1.9.3/tools/swig/test/testTensor.py +0 -402
  753. numpy-1.9.3/tools/swig/test/testVector.py +0 -381
  754. {numpy-1.9.3 → numpy-1.10.0.post2}/BENTO_BUILD.txt +0 -0
  755. {numpy-1.9.3 → numpy-1.10.0.post2}/COMPATIBILITY +0 -0
  756. {numpy-1.9.3 → numpy-1.10.0.post2}/DEV_README.txt +0 -0
  757. {numpy-1.9.3 → numpy-1.10.0.post2}/README.txt +0 -0
  758. {numpy-1.9.3 → numpy-1.10.0.post2}/THANKS.txt +0 -0
  759. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/Makefile +0 -0
  760. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/BUGS.txt +0 -0
  761. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/FAQ.txt +0 -0
  762. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/HISTORY.txt +0 -0
  763. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/Makefile +0 -0
  764. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/OLDNEWS.txt +0 -0
  765. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/README.txt +0 -0
  766. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/Release-1.x.txt +0 -0
  767. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/Release-2.x.txt +0 -0
  768. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/Release-3.x.txt +0 -0
  769. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/Release-4.x.txt +0 -0
  770. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/TESTING.txt +0 -0
  771. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/THANKS.txt +0 -0
  772. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/TODO.txt +0 -0
  773. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/apps.tex +0 -0
  774. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/bugs.tex +0 -0
  775. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/collectinput.py +0 -0
  776. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/commands.tex +0 -0
  777. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/default.css +0 -0
  778. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/docutils.conf +0 -0
  779. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/ex1/arr.f +0 -0
  780. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/ex1/bar.f +0 -0
  781. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/ex1/foo.f +0 -0
  782. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/ex1/foobar-smart.f90 +0 -0
  783. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/ex1/foobar.f90 +0 -0
  784. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/ex1/foobarmodule.tex +0 -0
  785. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/ex1/runme +0 -0
  786. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/f2py.1 +0 -0
  787. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/f2py2e.tex +0 -0
  788. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/README.txt +0 -0
  789. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/aerostructure.jpg +0 -0
  790. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/flow.jpg +0 -0
  791. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/mk_html.sh +0 -0
  792. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/mk_pdf.sh +0 -0
  793. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/mk_ps.sh +0 -0
  794. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/src/examples/exp1.f +0 -0
  795. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/src/examples/exp1mess.txt +0 -0
  796. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/src/examples/exp1session.txt +0 -0
  797. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/src/examples/foo.pyf +0 -0
  798. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/src/examples/foom.pyf +0 -0
  799. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/structure.jpg +0 -0
  800. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/fortranobject.tex +0 -0
  801. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/hello.f +0 -0
  802. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/index.html +0 -0
  803. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/intro.tex +0 -0
  804. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/multiarray/array_from_pyobj.c +0 -0
  805. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/multiarray/bar.c +0 -0
  806. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/multiarray/foo.f +0 -0
  807. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/multiarray/fortran_array_from_pyobj.txt +0 -0
  808. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/multiarray/fun.pyf +0 -0
  809. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/multiarray/run.pyf +0 -0
  810. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/multiarray/transpose.txt +0 -0
  811. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/multiarrays.txt +0 -0
  812. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/notes.tex +0 -0
  813. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/oldnews.html +0 -0
  814. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/options.tex +0 -0
  815. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/pyforttest.pyf +0 -0
  816. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/pytest.py +0 -0
  817. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/python9.tex +0 -0
  818. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/signaturefile.tex +0 -0
  819. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/simple.f +0 -0
  820. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/simple_session.dat +0 -0
  821. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/using_F_compiler.txt +0 -0
  822. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/win32_notes.txt +0 -0
  823. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/postprocess.py +0 -0
  824. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/release/1.3.0-notes.rst +0 -0
  825. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/release/1.4.0-notes.rst +0 -0
  826. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/release/1.5.0-notes.rst +0 -0
  827. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/release/1.6.0-notes.rst +0 -0
  828. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/release/1.6.1-notes.rst +0 -0
  829. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/release/1.6.2-notes.rst +0 -0
  830. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/release/1.7.0-notes.rst +0 -0
  831. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/release/1.7.1-notes.rst +0 -0
  832. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/release/1.7.2-notes.rst +0 -0
  833. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/release/1.8.0-notes.rst +0 -0
  834. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/release/1.8.1-notes.rst +0 -0
  835. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/release/1.8.2-notes.rst +0 -0
  836. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/release/1.9.0-notes.rst +0 -0
  837. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/release/1.9.1-notes.rst +0 -0
  838. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/release/1.9.2-notes.rst +0 -0
  839. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/release/time_based_proposal.rst +0 -0
  840. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/.git +0 -0
  841. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/.gitignore +0 -0
  842. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/Makefile +0 -0
  843. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/README.rst +0 -0
  844. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_static/scipyshiny_small.png +0 -0
  845. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/layout.html +0 -0
  846. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/searchbox.html +0 -0
  847. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/sourcelink.html +0 -0
  848. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/css/extend.css +0 -0
  849. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/css/pygments.css +0 -0
  850. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/css/scipy-central.css +0 -0
  851. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/css/spc-bootstrap.css +0 -0
  852. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/css/spc-extend.css +0 -0
  853. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/all-icons.svg +0 -0
  854. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/contents.png +0 -0
  855. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/create-new-account-icon.png +0 -0
  856. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/external-link-icon-shrunk.png +0 -0
  857. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/external-link-icon.png +0 -0
  858. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/external-link-icon.svg +0 -0
  859. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/external-link-list-icon-tiniest.png +0 -0
  860. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/external-link-list-icon-tiny.png +0 -0
  861. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/external-link-list-icon.png +0 -0
  862. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ad.png +0 -0
  863. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ae.png +0 -0
  864. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-af.png +0 -0
  865. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ag.png +0 -0
  866. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ai.png +0 -0
  867. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-al.png +0 -0
  868. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-am.png +0 -0
  869. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ao.png +0 -0
  870. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-aq.png +0 -0
  871. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ar.png +0 -0
  872. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-as.png +0 -0
  873. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-at.png +0 -0
  874. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-au.png +0 -0
  875. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-aw.png +0 -0
  876. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-az.png +0 -0
  877. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ba.png +0 -0
  878. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bb.png +0 -0
  879. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bd.png +0 -0
  880. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-be.png +0 -0
  881. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bf.png +0 -0
  882. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bg.png +0 -0
  883. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bh.png +0 -0
  884. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bi.png +0 -0
  885. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bj.png +0 -0
  886. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bl.png +0 -0
  887. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bm.png +0 -0
  888. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bn.png +0 -0
  889. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bo.png +0 -0
  890. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-br.png +0 -0
  891. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bs.png +0 -0
  892. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bt.png +0 -0
  893. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bw.png +0 -0
  894. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-by.png +0 -0
  895. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bz.png +0 -0
  896. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ca.png +0 -0
  897. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cc.png +0 -0
  898. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cd.png +0 -0
  899. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cf.png +0 -0
  900. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cg.png +0 -0
  901. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ch.png +0 -0
  902. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ci.png +0 -0
  903. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ck.png +0 -0
  904. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cl.png +0 -0
  905. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cm.png +0 -0
  906. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cn.png +0 -0
  907. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-co.png +0 -0
  908. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cr.png +0 -0
  909. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cu.png +0 -0
  910. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cv.png +0 -0
  911. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cw.png +0 -0
  912. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cx.png +0 -0
  913. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cy.png +0 -0
  914. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cz.png +0 -0
  915. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-de.png +0 -0
  916. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-dj.png +0 -0
  917. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-dk.png +0 -0
  918. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-dm.png +0 -0
  919. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-do.png +0 -0
  920. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-dz.png +0 -0
  921. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ec.png +0 -0
  922. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ee.png +0 -0
  923. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-eg.png +0 -0
  924. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-er.png +0 -0
  925. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-es.png +0 -0
  926. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-et.png +0 -0
  927. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-fi.png +0 -0
  928. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-fj.png +0 -0
  929. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-fk.png +0 -0
  930. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-fm.png +0 -0
  931. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-fo.png +0 -0
  932. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-fr.png +0 -0
  933. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ga.png +0 -0
  934. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gb.png +0 -0
  935. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gd.png +0 -0
  936. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ge.png +0 -0
  937. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gf.png +0 -0
  938. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gg.png +0 -0
  939. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gh.png +0 -0
  940. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gi.png +0 -0
  941. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gl.png +0 -0
  942. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gm.png +0 -0
  943. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gn.png +0 -0
  944. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gq.png +0 -0
  945. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gr.png +0 -0
  946. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gs.png +0 -0
  947. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gt.png +0 -0
  948. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gu.png +0 -0
  949. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gw.png +0 -0
  950. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gy.png +0 -0
  951. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-hk.png +0 -0
  952. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-hm.png +0 -0
  953. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-hn.png +0 -0
  954. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-hr.png +0 -0
  955. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ht.png +0 -0
  956. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-hu.png +0 -0
  957. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-id.png +0 -0
  958. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ie.png +0 -0
  959. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-il.png +0 -0
  960. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-im.png +0 -0
  961. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-in.png +0 -0
  962. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-io.png +0 -0
  963. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-iq.png +0 -0
  964. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ir.png +0 -0
  965. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-is.png +0 -0
  966. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-it.png +0 -0
  967. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-je.png +0 -0
  968. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-jm.png +0 -0
  969. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-jo.png +0 -0
  970. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-jp.png +0 -0
  971. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ke.png +0 -0
  972. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-kg.png +0 -0
  973. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-kh.png +0 -0
  974. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ki.png +0 -0
  975. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-km.png +0 -0
  976. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-kn.png +0 -0
  977. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-kp.png +0 -0
  978. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-kr.png +0 -0
  979. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-kw.png +0 -0
  980. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ky.png +0 -0
  981. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-kz.png +0 -0
  982. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-la.png +0 -0
  983. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-lb.png +0 -0
  984. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-lc.png +0 -0
  985. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-li.png +0 -0
  986. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-lk.png +0 -0
  987. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-lr.png +0 -0
  988. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ls.png +0 -0
  989. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-lt.png +0 -0
  990. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-lu.png +0 -0
  991. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-lv.png +0 -0
  992. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ly.png +0 -0
  993. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ma.png +0 -0
  994. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mc.png +0 -0
  995. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-md.png +0 -0
  996. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-me.png +0 -0
  997. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mf.png +0 -0
  998. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mg.png +0 -0
  999. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mh.png +0 -0
  1000. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mk.png +0 -0
  1001. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ml.png +0 -0
  1002. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mm.png +0 -0
  1003. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mn.png +0 -0
  1004. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mo.png +0 -0
  1005. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mp.png +0 -0
  1006. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mq.png +0 -0
  1007. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mr.png +0 -0
  1008. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ms.png +0 -0
  1009. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mt.png +0 -0
  1010. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mu.png +0 -0
  1011. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mv.png +0 -0
  1012. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mw.png +0 -0
  1013. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mx.png +0 -0
  1014. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-my.png +0 -0
  1015. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mz.png +0 -0
  1016. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-na.png +0 -0
  1017. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-nc.png +0 -0
  1018. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ne.png +0 -0
  1019. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-nf.png +0 -0
  1020. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ng.png +0 -0
  1021. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ni.png +0 -0
  1022. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-nl.png +0 -0
  1023. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-no.png +0 -0
  1024. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-np.png +0 -0
  1025. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-nr.png +0 -0
  1026. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-nu.png +0 -0
  1027. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-nz.png +0 -0
  1028. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-om.png +0 -0
  1029. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pa.png +0 -0
  1030. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pe.png +0 -0
  1031. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pf.png +0 -0
  1032. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pg.png +0 -0
  1033. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ph.png +0 -0
  1034. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pk.png +0 -0
  1035. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pl.png +0 -0
  1036. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pm.png +0 -0
  1037. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pn.png +0 -0
  1038. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pr.png +0 -0
  1039. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ps.png +0 -0
  1040. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pt.png +0 -0
  1041. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pw.png +0 -0
  1042. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-py.png +0 -0
  1043. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-qa.png +0 -0
  1044. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-re.png +0 -0
  1045. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ro.png +0 -0
  1046. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-rs.png +0 -0
  1047. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ru.png +0 -0
  1048. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-rw.png +0 -0
  1049. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sa.png +0 -0
  1050. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sb.png +0 -0
  1051. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sc.png +0 -0
  1052. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sd.png +0 -0
  1053. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-se.png +0 -0
  1054. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sg.png +0 -0
  1055. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sh.png +0 -0
  1056. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-si.png +0 -0
  1057. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sj.png +0 -0
  1058. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sk.png +0 -0
  1059. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sl.png +0 -0
  1060. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sm.png +0 -0
  1061. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sn.png +0 -0
  1062. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-so.png +0 -0
  1063. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sr.png +0 -0
  1064. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-st.png +0 -0
  1065. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sv.png +0 -0
  1066. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sy.png +0 -0
  1067. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sz.png +0 -0
  1068. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tc.png +0 -0
  1069. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-td.png +0 -0
  1070. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tf.png +0 -0
  1071. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tg.png +0 -0
  1072. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-th.png +0 -0
  1073. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tj.png +0 -0
  1074. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tk.png +0 -0
  1075. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tl.png +0 -0
  1076. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tm.png +0 -0
  1077. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tn.png +0 -0
  1078. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-to.png +0 -0
  1079. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tr.png +0 -0
  1080. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tt.png +0 -0
  1081. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tv.png +0 -0
  1082. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tw.png +0 -0
  1083. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tz.png +0 -0
  1084. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ua.png +0 -0
  1085. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ug.png +0 -0
  1086. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-um.png +0 -0
  1087. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-us.png +0 -0
  1088. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-uy.png +0 -0
  1089. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-uz.png +0 -0
  1090. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-va.png +0 -0
  1091. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-vc.png +0 -0
  1092. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ve.png +0 -0
  1093. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-vg.png +0 -0
  1094. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-vi.png +0 -0
  1095. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-vn.png +0 -0
  1096. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-vu.png +0 -0
  1097. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-wf.png +0 -0
  1098. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ws.png +0 -0
  1099. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ye.png +0 -0
  1100. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-za.png +0 -0
  1101. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-zm.png +0 -0
  1102. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-zw.png +0 -0
  1103. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/glyphicons-halflings-white.png +0 -0
  1104. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/glyphicons-halflings.png +0 -0
  1105. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/important-icon.png +0 -0
  1106. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/information-icon.png +0 -0
  1107. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/internet-web-browser.png +0 -0
  1108. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/multiple-file-icon-shrunk.png +0 -0
  1109. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/multiple-file-icon.png +0 -0
  1110. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/multiple-file-icon.svg +0 -0
  1111. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/multiple-file-list-icon-tiny.png +0 -0
  1112. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/multiple-file-list-icon.png +0 -0
  1113. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/navigation.png +0 -0
  1114. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/person-list-icon-tiny.png +0 -0
  1115. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/person-list-icon.png +0 -0
  1116. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/scipy-logo.png +0 -0
  1117. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/scipy_org_logo.gif +0 -0
  1118. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/scipycentral_logo.png +0 -0
  1119. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/scipyshiny_small.png +0 -0
  1120. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/send-email-icon.png +0 -0
  1121. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/single-file-icon-shrunk.png +0 -0
  1122. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/single-file-icon.png +0 -0
  1123. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/single-file-icon.svg +0 -0
  1124. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/single-file-list-icon-tiniest.png +0 -0
  1125. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/single-file-list-icon-tiny.png +0 -0
  1126. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/single-file-list-icon.png +0 -0
  1127. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/transparent-pixel.gif +0 -0
  1128. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/ui-anim_basic_16x16.gif +0 -0
  1129. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/js/copybutton.js +0 -0
  1130. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/accordion.less +0 -0
  1131. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/alerts.less +0 -0
  1132. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/bootstrap.less +0 -0
  1133. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/breadcrumbs.less +0 -0
  1134. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/button-groups.less +0 -0
  1135. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/buttons.less +0 -0
  1136. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/carousel.less +0 -0
  1137. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/close.less +0 -0
  1138. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/code.less +0 -0
  1139. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/component-animations.less +0 -0
  1140. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/dropdowns.less +0 -0
  1141. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/forms.less +0 -0
  1142. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/grid.less +0 -0
  1143. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/hero-unit.less +0 -0
  1144. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/labels-badges.less +0 -0
  1145. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/layouts.less +0 -0
  1146. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/media.less +0 -0
  1147. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/mixins.less +0 -0
  1148. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/modals.less +0 -0
  1149. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/navbar.less +0 -0
  1150. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/navs.less +0 -0
  1151. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/pager.less +0 -0
  1152. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/pagination.less +0 -0
  1153. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/popovers.less +0 -0
  1154. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/progress-bars.less +0 -0
  1155. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/reset.less +0 -0
  1156. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/responsive-1200px-min.less +0 -0
  1157. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/responsive-767px-max.less +0 -0
  1158. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/responsive-768px-979px.less +0 -0
  1159. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/responsive-navbar.less +0 -0
  1160. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/responsive-utilities.less +0 -0
  1161. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/responsive.less +0 -0
  1162. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/scaffolding.less +0 -0
  1163. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/sprites.less +0 -0
  1164. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/tables.less +0 -0
  1165. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/thumbnails.less +0 -0
  1166. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/tooltip.less +0 -0
  1167. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/type.less +0 -0
  1168. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/utilities.less +0 -0
  1169. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/variables.less +0 -0
  1170. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/wells.less +0 -0
  1171. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/spc-bootstrap.less +0 -0
  1172. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/spc-content.less +0 -0
  1173. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/spc-extend.less +0 -0
  1174. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/spc-footer.less +0 -0
  1175. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/spc-header.less +0 -0
  1176. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/spc-rightsidebar.less +0 -0
  1177. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/spc-utils.less +0 -0
  1178. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/scipy.css_t +0 -0
  1179. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/theme.conf +0 -0
  1180. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/conf.py +0 -0
  1181. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/index.rst +0 -0
  1182. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/test_autodoc.rst +0 -0
  1183. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/test_autodoc_2.rst +0 -0
  1184. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/test_autodoc_3.rst +0 -0
  1185. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/test_autodoc_4.rst +0 -0
  1186. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/test_optimize.rst +0 -0
  1187. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/_templates/autosummary/class.rst +0 -0
  1188. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/_templates/indexcontent.html +0 -0
  1189. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/_templates/indexsidebar.html +0 -0
  1190. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/_templates/layout.html +0 -0
  1191. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/about.rst +0 -0
  1192. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/bugs.rst +0 -0
  1193. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/contents.rst +0 -0
  1194. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/dev/gitwash/configure_git.rst +0 -0
  1195. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/dev/gitwash/development_setup.rst +0 -0
  1196. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/dev/gitwash/dot2_dot3.rst +0 -0
  1197. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/dev/gitwash/following_latest.rst +0 -0
  1198. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/dev/gitwash/forking_button.png +0 -0
  1199. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/dev/gitwash/git_development.rst +0 -0
  1200. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/dev/gitwash/git_intro.rst +0 -0
  1201. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/dev/gitwash/git_resources.rst +0 -0
  1202. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/dev/gitwash/pull_button.png +0 -0
  1203. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/dev/gitwash_links.txt +0 -0
  1204. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/advanced.rst +0 -0
  1205. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/allocarr.f90 +0 -0
  1206. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/allocarr_session.dat +0 -0
  1207. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/array.f +0 -0
  1208. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/array_session.dat +0 -0
  1209. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/calculate.f +0 -0
  1210. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/calculate_session.dat +0 -0
  1211. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/callback.f +0 -0
  1212. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/callback2.pyf +0 -0
  1213. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/callback_session.dat +0 -0
  1214. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/common.f +0 -0
  1215. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/common_session.dat +0 -0
  1216. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/compile_session.dat +0 -0
  1217. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/distutils.rst +0 -0
  1218. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/extcallback.f +0 -0
  1219. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/extcallback_session.dat +0 -0
  1220. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/fib1.f +0 -0
  1221. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/fib1.pyf +0 -0
  1222. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/fib2.pyf +0 -0
  1223. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/fib3.f +0 -0
  1224. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/ftype.f +0 -0
  1225. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/ftype_session.dat +0 -0
  1226. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/getting-started.rst +0 -0
  1227. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/index.rst +0 -0
  1228. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/moddata.f90 +0 -0
  1229. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/moddata_session.dat +0 -0
  1230. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/python-usage.rst +0 -0
  1231. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/run_main_session.dat +0 -0
  1232. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/scalar.f +0 -0
  1233. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/scalar_session.dat +0 -0
  1234. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/setup_example.py +0 -0
  1235. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/signature-file.rst +0 -0
  1236. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/spam.pyf +0 -0
  1237. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/spam_session.dat +0 -0
  1238. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/string.f +0 -0
  1239. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/string_session.dat +0 -0
  1240. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/usage.rst +0 -0
  1241. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/var.pyf +0 -0
  1242. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/var_session.dat +0 -0
  1243. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/glossary.rst +0 -0
  1244. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/license.rst +0 -0
  1245. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/neps/datetime-proposal.rst +0 -0
  1246. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/neps/datetime-proposal3.rst +0 -0
  1247. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/neps/deferred-ufunc-evaluation.rst +0 -0
  1248. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/neps/generalized-ufuncs.rst +0 -0
  1249. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/neps/groupby_additions.rst +0 -0
  1250. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/neps/index.rst +0 -0
  1251. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/neps/math_config_clean.rst +0 -0
  1252. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/neps/missing-data.rst +0 -0
  1253. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/neps/new-iterator-ufunc.rst +0 -0
  1254. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/neps/newbugtracker.rst +0 -0
  1255. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/neps/npy-format.rst +0 -0
  1256. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/neps/structured_array_extensions.rst +0 -0
  1257. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/neps/ufunc-overrides.rst +0 -0
  1258. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/neps/warnfix.rst +0 -0
  1259. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/arrays.datetime.rst +0 -0
  1260. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/arrays.nditer.rst +0 -0
  1261. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/arrays.rst +0 -0
  1262. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/c-api.deprecations.rst +0 -0
  1263. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/c-api.rst +0 -0
  1264. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/distutils.rst +0 -0
  1265. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/figures/dtype-hierarchy.dia +0 -0
  1266. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/figures/dtype-hierarchy.pdf +0 -0
  1267. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/figures/dtype-hierarchy.png +0 -0
  1268. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/figures/threefundamental.fig +0 -0
  1269. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/figures/threefundamental.pdf +0 -0
  1270. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/figures/threefundamental.png +0 -0
  1271. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/internals.rst +0 -0
  1272. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/maskedarray.baseclass.rst +0 -0
  1273. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/maskedarray.generic.rst +0 -0
  1274. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/maskedarray.rst +0 -0
  1275. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.array-creation.rst +0 -0
  1276. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.bitwise.rst +0 -0
  1277. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.char.rst +0 -0
  1278. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.ctypeslib.rst +0 -0
  1279. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.datetime.rst +0 -0
  1280. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.dtype.rst +0 -0
  1281. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.dual.rst +0 -0
  1282. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.emath.rst +0 -0
  1283. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.err.rst +0 -0
  1284. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.fft.rst +0 -0
  1285. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.financial.rst +0 -0
  1286. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.functional.rst +0 -0
  1287. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.help.rst +0 -0
  1288. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.indexing.rst +0 -0
  1289. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.logic.rst +0 -0
  1290. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.math.rst +0 -0
  1291. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.matlib.rst +0 -0
  1292. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.numarray.rst +0 -0
  1293. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.oldnumeric.rst +0 -0
  1294. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.other.rst +0 -0
  1295. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.padding.rst +0 -0
  1296. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.chebyshev.rst +0 -0
  1297. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.classes.rst +0 -0
  1298. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.hermite.rst +0 -0
  1299. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.hermite_e.rst +0 -0
  1300. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.laguerre.rst +0 -0
  1301. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.legendre.rst +0 -0
  1302. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.package.rst +0 -0
  1303. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.poly1d.rst +0 -0
  1304. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.polynomial.rst +0 -0
  1305. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.rst +0 -0
  1306. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.random.rst +0 -0
  1307. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.rst +0 -0
  1308. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.set.rst +0 -0
  1309. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.testing.rst +0 -0
  1310. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.window.rst +0 -0
  1311. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/swig.rst +0 -0
  1312. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/user/basics.broadcasting.rst +0 -0
  1313. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/user/basics.byteswapping.rst +0 -0
  1314. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/user/basics.creation.rst +0 -0
  1315. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/user/basics.indexing.rst +0 -0
  1316. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/user/basics.io.rst +0 -0
  1317. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/user/basics.rst +0 -0
  1318. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/user/basics.subclassing.rst +0 -0
  1319. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/user/basics.types.rst +0 -0
  1320. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/user/c-info.rst +0 -0
  1321. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/user/howtofind.rst +0 -0
  1322. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/user/index.rst +0 -0
  1323. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/user/introduction.rst +0 -0
  1324. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/user/misc.rst +0 -0
  1325. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/user/performance.rst +0 -0
  1326. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/user/whatisnumpy.rst +0 -0
  1327. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/.git +0 -0
  1328. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/.gitignore +0 -0
  1329. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/.travis.yml +0 -0
  1330. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/LICENSE.txt +0 -0
  1331. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/MANIFEST.in +0 -0
  1332. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/README.rst +0 -0
  1333. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/__init__.py +0 -0
  1334. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/comment_eater.py +0 -0
  1335. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/compiler_unparse.py +0 -0
  1336. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/docscrape.py +0 -0
  1337. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/docscrape_sphinx.py +0 -0
  1338. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/linkcode.py +0 -0
  1339. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/numpydoc.py +0 -0
  1340. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/phantom_import.py +0 -0
  1341. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/plot_directive.py +0 -0
  1342. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/tests/test_docscrape.py +0 -0
  1343. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/tests/test_linkcode.py +0 -0
  1344. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/tests/test_phantom_import.py +0 -0
  1345. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/tests/test_plot_directive.py +0 -0
  1346. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/tests/test_traitsdoc.py +0 -0
  1347. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/traitsdoc.py +0 -0
  1348. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/setup.py +0 -0
  1349. {numpy-1.9.3/numpy/core/code_generators → numpy-1.10.0.post2/numpy/_build_utils}/__init__.py +0 -0
  1350. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/compat/__init__.py +0 -0
  1351. {numpy-1.9.3/numpy/distutils/tests/f2py_ext → numpy-1.10.0.post2/numpy/core/code_generators}/__init__.py +0 -0
  1352. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/code_generators/genapi.py +0 -0
  1353. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/code_generators/generate_numpy_api.py +0 -0
  1354. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/cversions.py +0 -0
  1355. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/include/numpy/_neighborhood_iterator_imp.h +0 -0
  1356. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/include/numpy/_numpyconfig.h.in +0 -0
  1357. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/include/numpy/arrayobject.h +0 -0
  1358. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/include/numpy/arrayscalars.h +0 -0
  1359. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/include/numpy/halffloat.h +0 -0
  1360. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/include/numpy/noprefix.h +0 -0
  1361. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/include/numpy/npy_1_7_deprecated_api.h +0 -0
  1362. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/include/numpy/npy_interrupt.h +0 -0
  1363. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/include/numpy/npy_no_deprecated_api.h +0 -0
  1364. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/include/numpy/npy_os.h +0 -0
  1365. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/include/numpy/old_defines.h +0 -0
  1366. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/include/numpy/oldnumeric.h +0 -0
  1367. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/include/numpy/ufuncobject.h +0 -0
  1368. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/include/numpy/utils.h +0 -0
  1369. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/info.py +0 -0
  1370. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/mlib.ini.in +0 -0
  1371. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/npymath.ini.in +0 -0
  1372. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/dummymodule.c +0 -0
  1373. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/_datetime.h +0 -0
  1374. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/alloc.h +0 -0
  1375. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/array_assign.c +0 -0
  1376. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/array_assign.h +0 -0
  1377. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/array_assign_array.c +0 -0
  1378. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/array_assign_scalar.c +0 -0
  1379. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/arrayobject.h +0 -0
  1380. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/buffer.h +0 -0
  1381. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/calculation.h +0 -0
  1382. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/conversion_utils.h +0 -0
  1383. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/convert.h +0 -0
  1384. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/convert_datatype.h +0 -0
  1385. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/ctors.h +0 -0
  1386. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/datetime_busday.h +0 -0
  1387. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/datetime_busdaycal.h +0 -0
  1388. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/datetime_strings.h +0 -0
  1389. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/descriptor.h +0 -0
  1390. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/flagsobject.c +0 -0
  1391. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/getset.h +0 -0
  1392. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/hashdescr.h +0 -0
  1393. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/item_selection.h +0 -0
  1394. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/iterators.h +0 -0
  1395. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/methods.h +0 -0
  1396. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/nditer_impl.h +0 -0
  1397. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/nditer_pywrap.h +0 -0
  1398. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/nditer_templ.c.src +0 -0
  1399. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/numpymemoryview.h +0 -0
  1400. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/numpyos.h +0 -0
  1401. {numpy-1.9.3/numpy/core/blasdot → numpy-1.10.0.post2/numpy/core/src/multiarray}/python_xerbla.c +0 -0
  1402. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/refcount.c +0 -0
  1403. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/refcount.h +0 -0
  1404. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/sequence.c +0 -0
  1405. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/sequence.h +0 -0
  1406. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/shape.h +0 -0
  1407. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/ucsnarrow.h +0 -0
  1408. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/usertypes.c +0 -0
  1409. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/usertypes.h +0 -0
  1410. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/npymath/_signbit.c +0 -0
  1411. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/npymath/halffloat.c +0 -0
  1412. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/npymath/npy_math_common.h +0 -0
  1413. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/npysort/binsearch.c.src +0 -0
  1414. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/private/lowlevel_strided_loops.h +0 -0
  1415. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/private/npy_binsearch.h.src +0 -0
  1416. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/private/npy_fpmath.h +0 -0
  1417. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/private/npy_pycompat.h +0 -0
  1418. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/umath/reduction.c +0 -0
  1419. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/umath/reduction.h +0 -0
  1420. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/umath/struct_ufunc_test.c.src +0 -0
  1421. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/umath/ufunc_object.h +0 -0
  1422. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/umath/ufunc_type_resolution.h +0 -0
  1423. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/tests/data/astype_copy.pkl +0 -0
  1424. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/tests/data/recarray_from_file.fits +0 -0
  1425. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/tests/test_scalarprint.py +0 -0
  1426. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/ctypeslib.py +0 -0
  1427. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/__version__.py +0 -0
  1428. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/command/__init__.py +0 -0
  1429. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/command/bdist_rpm.py +0 -0
  1430. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/command/build_py.py +0 -0
  1431. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/command/build_scripts.py +0 -0
  1432. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/command/build_src.py +0 -0
  1433. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/command/config_compiler.py +0 -0
  1434. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/command/develop.py +0 -0
  1435. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/command/egg_info.py +0 -0
  1436. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/command/install.py +0 -0
  1437. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/command/install_clib.py +0 -0
  1438. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/command/install_data.py +0 -0
  1439. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/command/install_headers.py +0 -0
  1440. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/command/sdist.py +0 -0
  1441. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/compat.py +0 -0
  1442. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/conv_template.py +0 -0
  1443. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/core.py +0 -0
  1444. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/cpuinfo.py +0 -0
  1445. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/environment.py +0 -0
  1446. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/extension.py +0 -0
  1447. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/__init__.py +0 -0
  1448. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/absoft.py +0 -0
  1449. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/g95.py +0 -0
  1450. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/hpux.py +0 -0
  1451. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/ibm.py +0 -0
  1452. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/lahey.py +0 -0
  1453. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/mips.py +0 -0
  1454. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/nag.py +0 -0
  1455. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/none.py +0 -0
  1456. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/pathf95.py +0 -0
  1457. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/vast.py +0 -0
  1458. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/from_template.py +0 -0
  1459. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/info.py +0 -0
  1460. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/line_endings.py +0 -0
  1461. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/log.py +0 -0
  1462. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/mingw/gfortran_vs2003_hack.c +0 -0
  1463. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/numpy_distribution.py +0 -0
  1464. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/pathccompiler.py +0 -0
  1465. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/setup.py +0 -0
  1466. {numpy-1.9.3/numpy/distutils/tests/f2py_f90_ext → numpy-1.10.0.post2/numpy/distutils/tests/f2py_ext}/__init__.py +0 -0
  1467. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/tests/f2py_ext/setup.py +0 -0
  1468. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/tests/f2py_ext/src/fib1.f +0 -0
  1469. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/tests/f2py_ext/src/fib2.pyf +0 -0
  1470. {numpy-1.9.3/numpy/distutils/tests/gen_ext → numpy-1.10.0.post2/numpy/distutils/tests/f2py_f90_ext}/__init__.py +0 -0
  1471. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/tests/f2py_f90_ext/include/body.f90 +0 -0
  1472. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/tests/f2py_f90_ext/setup.py +0 -0
  1473. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/tests/f2py_f90_ext/src/foo_free.f90 +0 -0
  1474. {numpy-1.9.3/numpy/distutils/tests/pyrex_ext → numpy-1.10.0.post2/numpy/distutils/tests/gen_ext}/__init__.py +0 -0
  1475. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/tests/gen_ext/setup.py +0 -0
  1476. {numpy-1.9.3/numpy/distutils/tests/swig_ext → numpy-1.10.0.post2/numpy/distutils/tests/pyrex_ext}/__init__.py +0 -0
  1477. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/tests/pyrex_ext/primes.pyx +0 -0
  1478. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/tests/pyrex_ext/setup.py +0 -0
  1479. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/tests/setup.py +0 -0
  1480. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/tests/swig_ext/setup.py +0 -0
  1481. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/tests/swig_ext/src/example.c +0 -0
  1482. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/tests/swig_ext/src/example.i +0 -0
  1483. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/tests/swig_ext/src/zoo.cc +0 -0
  1484. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/tests/swig_ext/src/zoo.h +0 -0
  1485. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/tests/swig_ext/src/zoo.i +0 -0
  1486. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/tests/test_exec_command.py +0 -0
  1487. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/doc/__init__.py +0 -0
  1488. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/doc/basics.py +0 -0
  1489. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/doc/broadcasting.py +0 -0
  1490. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/doc/constants.py +0 -0
  1491. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/doc/howtofind.py +0 -0
  1492. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/doc/internals.py +0 -0
  1493. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/doc/io.py +0 -0
  1494. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/doc/jargon.py +0 -0
  1495. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/doc/methods_vs_functions.py +0 -0
  1496. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/doc/misc.py +0 -0
  1497. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/doc/performance.py +0 -0
  1498. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/doc/subclassing.py +0 -0
  1499. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/doc/ufuncs.py +0 -0
  1500. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/dual.py +0 -0
  1501. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/f2py/__version__.py +0 -0
  1502. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/f2py/info.py +0 -0
  1503. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/f2py/tests/src/assumed_shape/.f2py_f2cmap +0 -0
  1504. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/f2py/tests/src/assumed_shape/foo_free.f90 +0 -0
  1505. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/f2py/tests/src/assumed_shape/foo_mod.f90 +0 -0
  1506. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/f2py/tests/src/assumed_shape/foo_use.f90 +0 -0
  1507. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/f2py/tests/src/assumed_shape/precision.f90 +0 -0
  1508. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/f2py/tests/src/kind/foo.f90 +0 -0
  1509. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/f2py/tests/src/mixed/foo.f +0 -0
  1510. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/f2py/tests/src/mixed/foo_fixed.f90 +0 -0
  1511. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/f2py/tests/src/mixed/foo_free.f90 +0 -0
  1512. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/f2py/tests/src/regression/inout.f90 +0 -0
  1513. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/f2py/tests/src/size/foo.f90 +0 -0
  1514. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/fft/__init__.py +0 -0
  1515. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/fft/helper.py +0 -0
  1516. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/lib/__init__.py +0 -0
  1517. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/lib/_datasource.py +0 -0
  1518. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/lib/_version.py +0 -0
  1519. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/lib/scimath.py +0 -0
  1520. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/lib/tests/data/python3.npy +0 -0
  1521. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/lib/tests/data/win64python2.npy +0 -0
  1522. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/lib/tests/test__datasource.py +0 -0
  1523. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/lib/tests/test_arrayterator.py +0 -0
  1524. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/lib/tests/test_regression.py +0 -0
  1525. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/lib/tests/test_ufunclike.py +0 -0
  1526. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/lib/tests/test_utils.py +0 -0
  1527. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/lib/ufunclike.py +0 -0
  1528. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/lib/user_array.py +0 -0
  1529. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/linalg/__init__.py +0 -0
  1530. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/linalg/info.py +0 -0
  1531. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/linalg/lapack_lite/blas_lite.c +0 -0
  1532. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/linalg/lapack_lite/dlamch.c +0 -0
  1533. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/linalg/lapack_lite/dlapack_lite.c +0 -0
  1534. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/linalg/lapack_lite/f2c.h +0 -0
  1535. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/linalg/lapack_lite/f2c_lite.c +0 -0
  1536. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/linalg/lapack_lite/zlapack_lite.c +0 -0
  1537. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/linalg/setup.py +0 -0
  1538. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/linalg/tests/test_deprecations.py +0 -0
  1539. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/ma/version.py +0 -0
  1540. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/matrixlib/__init__.py +0 -0
  1541. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/matrixlib/setup.py +0 -0
  1542. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/polynomial/__init__.py +0 -0
  1543. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/polynomial/polynomial.py +0 -0
  1544. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/polynomial/setup.py +0 -0
  1545. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/polynomial/tests/test_chebyshev.py +0 -0
  1546. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/polynomial/tests/test_classes.py +0 -0
  1547. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/polynomial/tests/test_hermite.py +0 -0
  1548. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/polynomial/tests/test_hermite_e.py +0 -0
  1549. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/polynomial/tests/test_laguerre.py +0 -0
  1550. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/polynomial/tests/test_legendre.py +0 -0
  1551. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/polynomial/tests/test_polynomial.py +0 -0
  1552. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/polynomial/tests/test_polyutils.py +0 -0
  1553. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/polynomial/tests/test_printing.py +0 -0
  1554. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/random/__init__.py +0 -0
  1555. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/random/info.py +0 -0
  1556. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/random/mtrand/Python.pxi +0 -0
  1557. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/random/mtrand/distributions.h +0 -0
  1558. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/random/mtrand/generate_mtrand_c.py +0 -0
  1559. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/random/mtrand/initarray.c +0 -0
  1560. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/random/mtrand/initarray.h +0 -0
  1561. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/random/mtrand/mtrand_py_helper.h +0 -0
  1562. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/random/mtrand/numpy.pxd +0 -0
  1563. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/random/mtrand/randomkit.c +0 -0
  1564. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/random/mtrand/randomkit.h +0 -0
  1565. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/testing/tests/test_doctesting.py +0 -0
  1566. {numpy-1.9.3 → numpy-1.10.0.post2}/setupegg.py +0 -0
  1567. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/Makefile +0 -0
  1568. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/pyfragments.swg +0 -0
  1569. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/Array1.cxx +0 -0
  1570. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/Array1.h +0 -0
  1571. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/Array2.cxx +0 -0
  1572. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/Array2.h +0 -0
  1573. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/Farray.cxx +0 -0
  1574. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/Farray.h +0 -0
  1575. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/Farray.i +0 -0
  1576. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/Fortran.cxx +0 -0
  1577. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/Fortran.h +0 -0
  1578. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/Fortran.i +0 -0
  1579. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/Matrix.cxx +0 -0
  1580. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/Matrix.h +0 -0
  1581. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/Matrix.i +0 -0
  1582. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/SuperTensor.cxx +0 -0
  1583. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/SuperTensor.h +0 -0
  1584. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/SuperTensor.i +0 -0
  1585. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/Tensor.cxx +0 -0
  1586. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/Tensor.h +0 -0
  1587. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/Tensor.i +0 -0
  1588. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/Vector.cxx +0 -0
  1589. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/Vector.h +0 -0
  1590. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/Vector.i +0 -0
@@ -0,0 +1,2809 @@
1
+ /*
2
+ * This file implements most of the main API functions of NumPy's nditer.
3
+ * This excludes functions specialized using the templating system.
4
+ *
5
+ * Copyright (c) 2010-2011 by Mark Wiebe (mwwiebe@gmail.com)
6
+ * The Univerity of British Columbia
7
+ *
8
+ * Copyright (c) 2011 Enthought, Inc
9
+ *
10
+ * See LICENSE.txt for the license.
11
+ */
12
+ #define NPY_NO_DEPRECATED_API NPY_API_VERSION
13
+
14
+ /* Indicate that this .c file is allowed to include the header */
15
+ #define NPY_ITERATOR_IMPLEMENTATION_CODE
16
+ #include "nditer_impl.h"
17
+ #include "templ_common.h"
18
+
19
+ /* Internal helper functions private to this file */
20
+ static npy_intp
21
+ npyiter_checkreducesize(NpyIter *iter, npy_intp count,
22
+ npy_intp *reduce_innersize,
23
+ npy_intp *reduce_outerdim);
24
+
25
+ /*NUMPY_API
26
+ * Removes an axis from iteration. This requires that NPY_ITER_MULTI_INDEX
27
+ * was set for iterator creation, and does not work if buffering is
28
+ * enabled. This function also resets the iterator to its initial state.
29
+ *
30
+ * Returns NPY_SUCCEED or NPY_FAIL.
31
+ */
32
+ NPY_NO_EXPORT int
33
+ NpyIter_RemoveAxis(NpyIter *iter, int axis)
34
+ {
35
+ npy_uint32 itflags = NIT_ITFLAGS(iter);
36
+ int idim, ndim = NIT_NDIM(iter);
37
+ int iop, nop = NIT_NOP(iter);
38
+
39
+ int xdim = 0;
40
+ npy_int8 *perm = NIT_PERM(iter);
41
+ NpyIter_AxisData *axisdata_del = NIT_AXISDATA(iter), *axisdata;
42
+ npy_intp sizeof_axisdata = NIT_AXISDATA_SIZEOF(itflags, ndim, nop);
43
+
44
+ npy_intp *baseoffsets = NIT_BASEOFFSETS(iter);
45
+ char **resetdataptr = NIT_RESETDATAPTR(iter);
46
+
47
+ if (!(itflags&NPY_ITFLAG_HASMULTIINDEX)) {
48
+ PyErr_SetString(PyExc_RuntimeError,
49
+ "Iterator RemoveAxis may only be called "
50
+ "if a multi-index is being tracked");
51
+ return NPY_FAIL;
52
+ }
53
+ else if (itflags&NPY_ITFLAG_HASINDEX) {
54
+ PyErr_SetString(PyExc_RuntimeError,
55
+ "Iterator RemoveAxis may not be called on "
56
+ "an index is being tracked");
57
+ return NPY_FAIL;
58
+ }
59
+ else if (itflags&NPY_ITFLAG_BUFFER) {
60
+ PyErr_SetString(PyExc_RuntimeError,
61
+ "Iterator RemoveAxis may not be called on "
62
+ "a buffered iterator");
63
+ return NPY_FAIL;
64
+ }
65
+ else if (axis < 0 || axis >= ndim) {
66
+ PyErr_SetString(PyExc_ValueError,
67
+ "axis out of bounds in iterator RemoveAxis");
68
+ return NPY_FAIL;
69
+ }
70
+
71
+ /* Reverse axis, since the iterator treats them that way */
72
+ axis = ndim - 1 - axis;
73
+
74
+ /* First find the axis in question */
75
+ for (idim = 0; idim < ndim; ++idim) {
76
+ /* If this is it, and it's iterated forward, done */
77
+ if (perm[idim] == axis) {
78
+ xdim = idim;
79
+ break;
80
+ }
81
+ /* If this is it, but it's iterated backward, must reverse the axis */
82
+ else if (-1 - perm[idim] == axis) {
83
+ npy_intp *strides = NAD_STRIDES(axisdata_del);
84
+ npy_intp shape = NAD_SHAPE(axisdata_del), offset;
85
+
86
+ xdim = idim;
87
+
88
+ /*
89
+ * Adjust baseoffsets and resetbaseptr back to the start of
90
+ * this axis.
91
+ */
92
+ for (iop = 0; iop < nop; ++iop) {
93
+ offset = (shape-1)*strides[iop];
94
+ baseoffsets[iop] += offset;
95
+ resetdataptr[iop] += offset;
96
+ }
97
+ break;
98
+ }
99
+
100
+ NIT_ADVANCE_AXISDATA(axisdata_del, 1);
101
+ }
102
+
103
+ if (idim == ndim) {
104
+ PyErr_SetString(PyExc_RuntimeError,
105
+ "internal error in iterator perm");
106
+ return NPY_FAIL;
107
+ }
108
+
109
+ if (NAD_SHAPE(axisdata_del) == 0) {
110
+ PyErr_SetString(PyExc_ValueError,
111
+ "cannot remove a zero-sized axis from an iterator");
112
+ return NPY_FAIL;
113
+ }
114
+
115
+ /* Adjust the permutation */
116
+ for (idim = 0; idim < ndim-1; ++idim) {
117
+ npy_int8 p = (idim < xdim) ? perm[idim] : perm[idim+1];
118
+ if (p >= 0) {
119
+ if (p > axis) {
120
+ --p;
121
+ }
122
+ }
123
+ else if (p <= 0) {
124
+ if (p < -1-axis) {
125
+ ++p;
126
+ }
127
+ }
128
+ perm[idim] = p;
129
+ }
130
+
131
+ /* Shift all the axisdata structures by one */
132
+ axisdata = NIT_INDEX_AXISDATA(axisdata_del, 1);
133
+ memmove(axisdata_del, axisdata, (ndim-1-xdim)*sizeof_axisdata);
134
+
135
+ /* Adjust the iteration size and reset iterend */
136
+ NIT_ITERSIZE(iter) = 1;
137
+ axisdata = NIT_AXISDATA(iter);
138
+ for (idim = 0; idim < ndim-1; ++idim) {
139
+ if (npy_mul_with_overflow_intp(&NIT_ITERSIZE(iter),
140
+ NIT_ITERSIZE(iter), NAD_SHAPE(axisdata))) {
141
+ NIT_ITERSIZE(iter) = -1;
142
+ break;
143
+ }
144
+ NIT_ADVANCE_AXISDATA(axisdata, 1);
145
+ }
146
+ NIT_ITEREND(iter) = NIT_ITERSIZE(iter);
147
+
148
+ /* Shrink the iterator */
149
+ NIT_NDIM(iter) = ndim - 1;
150
+ /* If it is now 0-d fill the singleton dimension */
151
+ if (ndim == 1) {
152
+ npy_intp *strides = NAD_STRIDES(axisdata_del);
153
+ NAD_SHAPE(axisdata_del) = 1;
154
+ for (iop = 0; iop < nop; ++iop) {
155
+ strides[iop] = 0;
156
+ }
157
+ NIT_ITFLAGS(iter) |= NPY_ITFLAG_ONEITERATION;
158
+ }
159
+
160
+ return NpyIter_Reset(iter, NULL);
161
+ }
162
+
163
+ /*NUMPY_API
164
+ * Removes multi-index support from an iterator.
165
+ *
166
+ * Returns NPY_SUCCEED or NPY_FAIL.
167
+ */
168
+ NPY_NO_EXPORT int
169
+ NpyIter_RemoveMultiIndex(NpyIter *iter)
170
+ {
171
+ npy_uint32 itflags;
172
+
173
+ /* Make sure the iterator is reset */
174
+ if (NpyIter_Reset(iter, NULL) != NPY_SUCCEED) {
175
+ return NPY_FAIL;
176
+ }
177
+
178
+ itflags = NIT_ITFLAGS(iter);
179
+ if (itflags&NPY_ITFLAG_HASMULTIINDEX) {
180
+ if (NIT_ITERSIZE(iter) < 0) {
181
+ PyErr_SetString(PyExc_ValueError, "iterator is too large");
182
+ return NPY_FAIL;
183
+ }
184
+
185
+ NIT_ITFLAGS(iter) = itflags & ~NPY_ITFLAG_HASMULTIINDEX;
186
+ npyiter_coalesce_axes(iter);
187
+ }
188
+
189
+ return NPY_SUCCEED;
190
+ }
191
+
192
+ /*NUMPY_API
193
+ * Removes the inner loop handling (so HasExternalLoop returns true)
194
+ */
195
+ NPY_NO_EXPORT int
196
+ NpyIter_EnableExternalLoop(NpyIter *iter)
197
+ {
198
+ npy_uint32 itflags = NIT_ITFLAGS(iter);
199
+ /*int ndim = NIT_NDIM(iter);*/
200
+ int nop = NIT_NOP(iter);
201
+
202
+ /* Check conditions under which this can be done */
203
+ if (itflags&(NPY_ITFLAG_HASINDEX|NPY_ITFLAG_HASMULTIINDEX)) {
204
+ PyErr_SetString(PyExc_ValueError,
205
+ "Iterator flag EXTERNAL_LOOP cannot be used "
206
+ "if an index or multi-index is being tracked");
207
+ return NPY_FAIL;
208
+ }
209
+ if ((itflags&(NPY_ITFLAG_BUFFER|NPY_ITFLAG_RANGE|NPY_ITFLAG_EXLOOP))
210
+ == (NPY_ITFLAG_RANGE|NPY_ITFLAG_EXLOOP)) {
211
+ PyErr_SetString(PyExc_ValueError,
212
+ "Iterator flag EXTERNAL_LOOP cannot be used "
213
+ "with ranged iteration unless buffering is also enabled");
214
+ return NPY_FAIL;
215
+ }
216
+ /* Set the flag */
217
+ if (!(itflags&NPY_ITFLAG_EXLOOP)) {
218
+ itflags |= NPY_ITFLAG_EXLOOP;
219
+ NIT_ITFLAGS(iter) = itflags;
220
+
221
+ /*
222
+ * Check whether we can apply the single iteration
223
+ * optimization to the iternext function.
224
+ */
225
+ if (!(itflags&NPY_ITFLAG_BUFFER)) {
226
+ NpyIter_AxisData *axisdata = NIT_AXISDATA(iter);
227
+ if (NIT_ITERSIZE(iter) == NAD_SHAPE(axisdata)) {
228
+ NIT_ITFLAGS(iter) |= NPY_ITFLAG_ONEITERATION;
229
+ }
230
+ }
231
+ }
232
+
233
+ /* Reset the iterator */
234
+ return NpyIter_Reset(iter, NULL);
235
+ }
236
+
237
+ /*NUMPY_API
238
+ * Resets the iterator to its initial state
239
+ *
240
+ * If errmsg is non-NULL, it should point to a variable which will
241
+ * receive the error message, and no Python exception will be set.
242
+ * This is so that the function can be called from code not holding
243
+ * the GIL.
244
+ */
245
+ NPY_NO_EXPORT int
246
+ NpyIter_Reset(NpyIter *iter, char **errmsg)
247
+ {
248
+ npy_uint32 itflags = NIT_ITFLAGS(iter);
249
+ /*int ndim = NIT_NDIM(iter);*/
250
+ int nop = NIT_NOP(iter);
251
+
252
+ if (itflags&NPY_ITFLAG_BUFFER) {
253
+ NpyIter_BufferData *bufferdata;
254
+
255
+ /* If buffer allocation was delayed, do it now */
256
+ if (itflags&NPY_ITFLAG_DELAYBUF) {
257
+ if (!npyiter_allocate_buffers(iter, errmsg)) {
258
+ return NPY_FAIL;
259
+ }
260
+ NIT_ITFLAGS(iter) &= ~NPY_ITFLAG_DELAYBUF;
261
+ }
262
+ else {
263
+ /*
264
+ * If the iterindex is already right, no need to
265
+ * do anything
266
+ */
267
+ bufferdata = NIT_BUFFERDATA(iter);
268
+ if (NIT_ITERINDEX(iter) == NIT_ITERSTART(iter) &&
269
+ NBF_BUFITEREND(bufferdata) <= NIT_ITEREND(iter) &&
270
+ NBF_SIZE(bufferdata) > 0) {
271
+ return NPY_SUCCEED;
272
+ }
273
+
274
+ /* Copy any data from the buffers back to the arrays */
275
+ npyiter_copy_from_buffers(iter);
276
+ }
277
+ }
278
+
279
+ npyiter_goto_iterindex(iter, NIT_ITERSTART(iter));
280
+
281
+ if (itflags&NPY_ITFLAG_BUFFER) {
282
+ /* Prepare the next buffers and set iterend/size */
283
+ npyiter_copy_to_buffers(iter, NULL);
284
+ }
285
+
286
+ return NPY_SUCCEED;
287
+ }
288
+
289
+ /*NUMPY_API
290
+ * Resets the iterator to its initial state, with new base data pointers.
291
+ * This function requires great caution.
292
+ *
293
+ * If errmsg is non-NULL, it should point to a variable which will
294
+ * receive the error message, and no Python exception will be set.
295
+ * This is so that the function can be called from code not holding
296
+ * the GIL.
297
+ */
298
+ NPY_NO_EXPORT int
299
+ NpyIter_ResetBasePointers(NpyIter *iter, char **baseptrs, char **errmsg)
300
+ {
301
+ npy_uint32 itflags = NIT_ITFLAGS(iter);
302
+ /*int ndim = NIT_NDIM(iter);*/
303
+ int iop, nop = NIT_NOP(iter);
304
+
305
+ char **resetdataptr = NIT_RESETDATAPTR(iter);
306
+ npy_intp *baseoffsets = NIT_BASEOFFSETS(iter);
307
+
308
+ if (itflags&NPY_ITFLAG_BUFFER) {
309
+ /* If buffer allocation was delayed, do it now */
310
+ if (itflags&NPY_ITFLAG_DELAYBUF) {
311
+ if (!npyiter_allocate_buffers(iter, errmsg)) {
312
+ return NPY_FAIL;
313
+ }
314
+ NIT_ITFLAGS(iter) &= ~NPY_ITFLAG_DELAYBUF;
315
+ }
316
+ else {
317
+ /* Copy any data from the buffers back to the arrays */
318
+ npyiter_copy_from_buffers(iter);
319
+ }
320
+ }
321
+
322
+ /* The new data pointers for resetting */
323
+ for (iop = 0; iop < nop; ++iop) {
324
+ resetdataptr[iop] = baseptrs[iop] + baseoffsets[iop];
325
+ }
326
+
327
+ npyiter_goto_iterindex(iter, NIT_ITERSTART(iter));
328
+
329
+ if (itflags&NPY_ITFLAG_BUFFER) {
330
+ /* Prepare the next buffers and set iterend/size */
331
+ npyiter_copy_to_buffers(iter, NULL);
332
+ }
333
+
334
+ return NPY_SUCCEED;
335
+ }
336
+
337
+ /*NUMPY_API
338
+ * Resets the iterator to a new iterator index range
339
+ *
340
+ * If errmsg is non-NULL, it should point to a variable which will
341
+ * receive the error message, and no Python exception will be set.
342
+ * This is so that the function can be called from code not holding
343
+ * the GIL.
344
+ */
345
+ NPY_NO_EXPORT int
346
+ NpyIter_ResetToIterIndexRange(NpyIter *iter,
347
+ npy_intp istart, npy_intp iend, char **errmsg)
348
+ {
349
+ npy_uint32 itflags = NIT_ITFLAGS(iter);
350
+ /*int ndim = NIT_NDIM(iter);*/
351
+ /*int nop = NIT_NOP(iter);*/
352
+
353
+ if (!(itflags&NPY_ITFLAG_RANGE)) {
354
+ if (errmsg == NULL) {
355
+ PyErr_SetString(PyExc_ValueError,
356
+ "Cannot call ResetToIterIndexRange on an iterator without "
357
+ "requesting ranged iteration support in the constructor");
358
+ }
359
+ else {
360
+ *errmsg = "Cannot call ResetToIterIndexRange on an iterator "
361
+ "without requesting ranged iteration support in the "
362
+ "constructor";
363
+ }
364
+ return NPY_FAIL;
365
+ }
366
+
367
+ if (istart < 0 || iend > NIT_ITERSIZE(iter)) {
368
+ if (NIT_ITERSIZE(iter) < 0) {
369
+ if (errmsg == NULL) {
370
+ PyErr_SetString(PyExc_ValueError, "iterator is too large");
371
+ }
372
+ else {
373
+ *errmsg = "iterator is too large";
374
+ }
375
+ return NPY_FAIL;
376
+ }
377
+ if (errmsg == NULL) {
378
+ PyErr_Format(PyExc_ValueError,
379
+ "Out-of-bounds range [%d, %d) passed to "
380
+ "ResetToIterIndexRange", (int)istart, (int)iend);
381
+ }
382
+ else {
383
+ *errmsg = "Out-of-bounds range passed to ResetToIterIndexRange";
384
+ }
385
+ return NPY_FAIL;
386
+ }
387
+ else if (iend < istart) {
388
+ if (errmsg == NULL) {
389
+ PyErr_Format(PyExc_ValueError,
390
+ "Invalid range [%d, %d) passed to ResetToIterIndexRange",
391
+ (int)istart, (int)iend);
392
+ }
393
+ else {
394
+ *errmsg = "Invalid range passed to ResetToIterIndexRange";
395
+ }
396
+ return NPY_FAIL;
397
+ }
398
+
399
+ NIT_ITERSTART(iter) = istart;
400
+ NIT_ITEREND(iter) = iend;
401
+
402
+ return NpyIter_Reset(iter, errmsg);
403
+ }
404
+
405
+ /*NUMPY_API
406
+ * Sets the iterator to the specified multi-index, which must have the
407
+ * correct number of entries for 'ndim'. It is only valid
408
+ * when NPY_ITER_MULTI_INDEX was passed to the constructor. This operation
409
+ * fails if the multi-index is out of bounds.
410
+ *
411
+ * Returns NPY_SUCCEED on success, NPY_FAIL on failure.
412
+ */
413
+ NPY_NO_EXPORT int
414
+ NpyIter_GotoMultiIndex(NpyIter *iter, npy_intp *multi_index)
415
+ {
416
+ npy_uint32 itflags = NIT_ITFLAGS(iter);
417
+ int idim, ndim = NIT_NDIM(iter);
418
+ int nop = NIT_NOP(iter);
419
+
420
+ npy_intp iterindex, factor;
421
+ NpyIter_AxisData *axisdata;
422
+ npy_intp sizeof_axisdata;
423
+ npy_int8 *perm;
424
+
425
+ if (!(itflags&NPY_ITFLAG_HASMULTIINDEX)) {
426
+ PyErr_SetString(PyExc_ValueError,
427
+ "Cannot call GotoMultiIndex on an iterator without "
428
+ "requesting a multi-index in the constructor");
429
+ return NPY_FAIL;
430
+ }
431
+
432
+ if (itflags&NPY_ITFLAG_BUFFER) {
433
+ PyErr_SetString(PyExc_ValueError,
434
+ "Cannot call GotoMultiIndex on an iterator which "
435
+ "is buffered");
436
+ return NPY_FAIL;
437
+ }
438
+
439
+ if (itflags&NPY_ITFLAG_EXLOOP) {
440
+ PyErr_SetString(PyExc_ValueError,
441
+ "Cannot call GotoMultiIndex on an iterator which "
442
+ "has the flag EXTERNAL_LOOP");
443
+ return NPY_FAIL;
444
+ }
445
+
446
+ perm = NIT_PERM(iter);
447
+ axisdata = NIT_AXISDATA(iter);
448
+ sizeof_axisdata = NIT_AXISDATA_SIZEOF(itflags, ndim, nop);
449
+
450
+ /* Compute the iterindex corresponding to the multi-index */
451
+ iterindex = 0;
452
+ factor = 1;
453
+ for (idim = 0; idim < ndim; ++idim) {
454
+ npy_int8 p = perm[idim];
455
+ npy_intp i, shape;
456
+
457
+ shape = NAD_SHAPE(axisdata);
458
+ if (p < 0) {
459
+ /* If the perm entry is negative, reverse the index */
460
+ i = shape - multi_index[ndim+p] - 1;
461
+ }
462
+ else {
463
+ i = multi_index[ndim-p-1];
464
+ }
465
+
466
+ /* Bounds-check this index */
467
+ if (i >= 0 && i < shape) {
468
+ iterindex += factor * i;
469
+ factor *= shape;
470
+ }
471
+ else {
472
+ PyErr_SetString(PyExc_IndexError,
473
+ "Iterator GotoMultiIndex called with an out-of-bounds "
474
+ "multi-index");
475
+ return NPY_FAIL;
476
+ }
477
+
478
+ NIT_ADVANCE_AXISDATA(axisdata, 1);
479
+ }
480
+
481
+ if (iterindex < NIT_ITERSTART(iter) || iterindex >= NIT_ITEREND(iter)) {
482
+ if (NIT_ITERSIZE(iter) < 0) {
483
+ PyErr_SetString(PyExc_ValueError, "iterator is too large");
484
+ return NPY_FAIL;
485
+ }
486
+ PyErr_SetString(PyExc_IndexError,
487
+ "Iterator GotoMultiIndex called with a multi-index outside the "
488
+ "restricted iteration range");
489
+ return NPY_FAIL;
490
+ }
491
+
492
+ npyiter_goto_iterindex(iter, iterindex);
493
+
494
+ return NPY_SUCCEED;
495
+ }
496
+
497
+ /*NUMPY_API
498
+ * If the iterator is tracking an index, sets the iterator
499
+ * to the specified index.
500
+ *
501
+ * Returns NPY_SUCCEED on success, NPY_FAIL on failure.
502
+ */
503
+ NPY_NO_EXPORT int
504
+ NpyIter_GotoIndex(NpyIter *iter, npy_intp flat_index)
505
+ {
506
+ npy_uint32 itflags = NIT_ITFLAGS(iter);
507
+ int idim, ndim = NIT_NDIM(iter);
508
+ int nop = NIT_NOP(iter);
509
+
510
+ npy_intp iterindex, factor;
511
+ NpyIter_AxisData *axisdata;
512
+ npy_intp sizeof_axisdata;
513
+
514
+ if (!(itflags&NPY_ITFLAG_HASINDEX)) {
515
+ PyErr_SetString(PyExc_ValueError,
516
+ "Cannot call GotoIndex on an iterator without "
517
+ "requesting a C or Fortran index in the constructor");
518
+ return NPY_FAIL;
519
+ }
520
+
521
+ if (itflags&NPY_ITFLAG_BUFFER) {
522
+ PyErr_SetString(PyExc_ValueError,
523
+ "Cannot call GotoIndex on an iterator which "
524
+ "is buffered");
525
+ return NPY_FAIL;
526
+ }
527
+
528
+ if (itflags&NPY_ITFLAG_EXLOOP) {
529
+ PyErr_SetString(PyExc_ValueError,
530
+ "Cannot call GotoIndex on an iterator which "
531
+ "has the flag EXTERNAL_LOOP");
532
+ return NPY_FAIL;
533
+ }
534
+
535
+ if (flat_index < 0 || flat_index >= NIT_ITERSIZE(iter)) {
536
+ PyErr_SetString(PyExc_IndexError,
537
+ "Iterator GotoIndex called with an out-of-bounds "
538
+ "index");
539
+ return NPY_FAIL;
540
+ }
541
+
542
+ axisdata = NIT_AXISDATA(iter);
543
+ sizeof_axisdata = NIT_AXISDATA_SIZEOF(itflags, ndim, nop);
544
+
545
+ /* Compute the iterindex corresponding to the flat_index */
546
+ iterindex = 0;
547
+ factor = 1;
548
+ for (idim = 0; idim < ndim; ++idim) {
549
+ npy_intp i, shape, iterstride;
550
+
551
+ iterstride = NAD_STRIDES(axisdata)[nop];
552
+ shape = NAD_SHAPE(axisdata);
553
+
554
+ /* Extract the index from the flat_index */
555
+ if (iterstride == 0) {
556
+ i = 0;
557
+ }
558
+ else if (iterstride < 0) {
559
+ i = shape - (flat_index/(-iterstride))%shape - 1;
560
+ }
561
+ else {
562
+ i = (flat_index/iterstride)%shape;
563
+ }
564
+
565
+ /* Add its contribution to iterindex */
566
+ iterindex += factor * i;
567
+ factor *= shape;
568
+
569
+ NIT_ADVANCE_AXISDATA(axisdata, 1);
570
+ }
571
+
572
+
573
+ if (iterindex < NIT_ITERSTART(iter) || iterindex >= NIT_ITEREND(iter)) {
574
+ PyErr_SetString(PyExc_IndexError,
575
+ "Iterator GotoIndex called with an index outside the "
576
+ "restricted iteration range.");
577
+ return NPY_FAIL;
578
+ }
579
+
580
+ npyiter_goto_iterindex(iter, iterindex);
581
+
582
+ return NPY_SUCCEED;
583
+ }
584
+
585
+ /*NUMPY_API
586
+ * Sets the iterator position to the specified iterindex,
587
+ * which matches the iteration order of the iterator.
588
+ *
589
+ * Returns NPY_SUCCEED on success, NPY_FAIL on failure.
590
+ */
591
+ NPY_NO_EXPORT int
592
+ NpyIter_GotoIterIndex(NpyIter *iter, npy_intp iterindex)
593
+ {
594
+ npy_uint32 itflags = NIT_ITFLAGS(iter);
595
+ /*int ndim = NIT_NDIM(iter);*/
596
+ int iop, nop = NIT_NOP(iter);
597
+
598
+ if (itflags&NPY_ITFLAG_EXLOOP) {
599
+ PyErr_SetString(PyExc_ValueError,
600
+ "Cannot call GotoIterIndex on an iterator which "
601
+ "has the flag EXTERNAL_LOOP");
602
+ return NPY_FAIL;
603
+ }
604
+
605
+ if (iterindex < NIT_ITERSTART(iter) || iterindex >= NIT_ITEREND(iter)) {
606
+ if (NIT_ITERSIZE(iter) < 0) {
607
+ PyErr_SetString(PyExc_ValueError, "iterator is too large");
608
+ return NPY_FAIL;
609
+ }
610
+ PyErr_SetString(PyExc_IndexError,
611
+ "Iterator GotoIterIndex called with an iterindex outside the "
612
+ "iteration range.");
613
+ return NPY_FAIL;
614
+ }
615
+
616
+ if (itflags&NPY_ITFLAG_BUFFER) {
617
+ NpyIter_BufferData *bufferdata = NIT_BUFFERDATA(iter);
618
+ npy_intp bufiterend, size;
619
+
620
+ size = NBF_SIZE(bufferdata);
621
+ bufiterend = NBF_BUFITEREND(bufferdata);
622
+ /* Check if the new iterindex is already within the buffer */
623
+ if (!(itflags&NPY_ITFLAG_REDUCE) && iterindex < bufiterend &&
624
+ iterindex >= bufiterend - size) {
625
+ npy_intp *strides, delta;
626
+ char **ptrs;
627
+
628
+ strides = NBF_STRIDES(bufferdata);
629
+ ptrs = NBF_PTRS(bufferdata);
630
+ delta = iterindex - NIT_ITERINDEX(iter);
631
+
632
+ for (iop = 0; iop < nop; ++iop) {
633
+ ptrs[iop] += delta * strides[iop];
634
+ }
635
+
636
+ NIT_ITERINDEX(iter) = iterindex;
637
+ }
638
+ /* Start the buffer at the provided iterindex */
639
+ else {
640
+ /* Write back to the arrays */
641
+ npyiter_copy_from_buffers(iter);
642
+
643
+ npyiter_goto_iterindex(iter, iterindex);
644
+
645
+ /* Prepare the next buffers and set iterend/size */
646
+ npyiter_copy_to_buffers(iter, NULL);
647
+ }
648
+ }
649
+ else {
650
+ npyiter_goto_iterindex(iter, iterindex);
651
+ }
652
+
653
+ return NPY_SUCCEED;
654
+ }
655
+
656
+ /*NUMPY_API
657
+ * Gets the current iteration index
658
+ */
659
+ NPY_NO_EXPORT npy_intp
660
+ NpyIter_GetIterIndex(NpyIter *iter)
661
+ {
662
+ npy_uint32 itflags = NIT_ITFLAGS(iter);
663
+ int idim, ndim = NIT_NDIM(iter);
664
+ int nop = NIT_NOP(iter);
665
+
666
+ /* iterindex is only used if NPY_ITER_RANGED or NPY_ITER_BUFFERED was set */
667
+ if (itflags&(NPY_ITFLAG_RANGE|NPY_ITFLAG_BUFFER)) {
668
+ return NIT_ITERINDEX(iter);
669
+ }
670
+ else {
671
+ npy_intp iterindex;
672
+ NpyIter_AxisData *axisdata;
673
+ npy_intp sizeof_axisdata;
674
+
675
+ iterindex = 0;
676
+ if (ndim == 0) {
677
+ return 0;
678
+ }
679
+ sizeof_axisdata = NIT_AXISDATA_SIZEOF(itflags, ndim, nop);
680
+ axisdata = NIT_INDEX_AXISDATA(NIT_AXISDATA(iter), ndim-1);
681
+
682
+ for (idim = ndim-2; idim >= 0; --idim) {
683
+ iterindex += NAD_INDEX(axisdata);
684
+ NIT_ADVANCE_AXISDATA(axisdata, -1);
685
+ iterindex *= NAD_SHAPE(axisdata);
686
+ }
687
+ iterindex += NAD_INDEX(axisdata);
688
+
689
+ return iterindex;
690
+ }
691
+ }
692
+
693
+ /*NUMPY_API
694
+ * Whether the buffer allocation is being delayed
695
+ */
696
+ NPY_NO_EXPORT npy_bool
697
+ NpyIter_HasDelayedBufAlloc(NpyIter *iter)
698
+ {
699
+ return (NIT_ITFLAGS(iter)&NPY_ITFLAG_DELAYBUF) != 0;
700
+ }
701
+
702
+ /*NUMPY_API
703
+ * Whether the iterator handles the inner loop
704
+ */
705
+ NPY_NO_EXPORT npy_bool
706
+ NpyIter_HasExternalLoop(NpyIter *iter)
707
+ {
708
+ return (NIT_ITFLAGS(iter)&NPY_ITFLAG_EXLOOP) != 0;
709
+ }
710
+
711
+ /*NUMPY_API
712
+ * Whether the iterator is tracking a multi-index
713
+ */
714
+ NPY_NO_EXPORT npy_bool
715
+ NpyIter_HasMultiIndex(NpyIter *iter)
716
+ {
717
+ return (NIT_ITFLAGS(iter)&NPY_ITFLAG_HASMULTIINDEX) != 0;
718
+ }
719
+
720
+ /*NUMPY_API
721
+ * Whether the iterator is tracking an index
722
+ */
723
+ NPY_NO_EXPORT npy_bool
724
+ NpyIter_HasIndex(NpyIter *iter)
725
+ {
726
+ return (NIT_ITFLAGS(iter)&NPY_ITFLAG_HASINDEX) != 0;
727
+ }
728
+
729
+ /*NUMPY_API
730
+ * Checks to see whether this is the first time the elements
731
+ * of the specified reduction operand which the iterator points at are
732
+ * being seen for the first time. The function returns
733
+ * a reasonable answer for reduction operands and when buffering is
734
+ * disabled. The answer may be incorrect for buffered non-reduction
735
+ * operands.
736
+ *
737
+ * This function is intended to be used in EXTERNAL_LOOP mode only,
738
+ * and will produce some wrong answers when that mode is not enabled.
739
+ *
740
+ * If this function returns true, the caller should also
741
+ * check the inner loop stride of the operand, because if
742
+ * that stride is 0, then only the first element of the innermost
743
+ * external loop is being visited for the first time.
744
+ *
745
+ * WARNING: For performance reasons, 'iop' is not bounds-checked,
746
+ * it is not confirmed that 'iop' is actually a reduction
747
+ * operand, and it is not confirmed that EXTERNAL_LOOP
748
+ * mode is enabled. These checks are the responsibility of
749
+ * the caller, and should be done outside of any inner loops.
750
+ */
751
+ NPY_NO_EXPORT npy_bool
752
+ NpyIter_IsFirstVisit(NpyIter *iter, int iop)
753
+ {
754
+ npy_uint32 itflags = NIT_ITFLAGS(iter);
755
+ int idim, ndim = NIT_NDIM(iter);
756
+ int nop = NIT_NOP(iter);
757
+
758
+ NpyIter_AxisData *axisdata;
759
+ npy_intp sizeof_axisdata;
760
+
761
+ sizeof_axisdata = NIT_AXISDATA_SIZEOF(itflags, ndim, nop);
762
+ axisdata = NIT_AXISDATA(iter);
763
+
764
+ for (idim = 0; idim < ndim; ++idim) {
765
+ npy_intp coord = NAD_INDEX(axisdata);
766
+ npy_intp stride = NAD_STRIDES(axisdata)[iop];
767
+
768
+ /*
769
+ * If this is a reduction dimension and the coordinate
770
+ * is not at the start, it's definitely not the first visit
771
+ */
772
+ if (stride == 0 && coord != 0) {
773
+ return 0;
774
+ }
775
+
776
+ NIT_ADVANCE_AXISDATA(axisdata, 1);
777
+ }
778
+
779
+ /*
780
+ * In reduction buffering mode, there's a double loop being
781
+ * tracked in the buffer part of the iterator data structure.
782
+ * We only need to check the outer level of this two-level loop,
783
+ * because of the requirement that EXTERNAL_LOOP be enabled.
784
+ */
785
+ if (itflags&NPY_ITFLAG_BUFFER) {
786
+ NpyIter_BufferData *bufferdata = NIT_BUFFERDATA(iter);
787
+ /* The outer reduce loop */
788
+ if (NBF_REDUCE_POS(bufferdata) != 0 &&
789
+ NBF_REDUCE_OUTERSTRIDES(bufferdata)[iop] == 0) {
790
+ return 0;
791
+ }
792
+ }
793
+
794
+ return 1;
795
+ }
796
+
797
+ /*NUMPY_API
798
+ * Whether the iteration could be done with no buffering.
799
+ */
800
+ NPY_NO_EXPORT npy_bool
801
+ NpyIter_RequiresBuffering(NpyIter *iter)
802
+ {
803
+ npy_uint32 itflags = NIT_ITFLAGS(iter);
804
+ /*int ndim = NIT_NDIM(iter);*/
805
+ int iop, nop = NIT_NOP(iter);
806
+
807
+ npyiter_opitflags *op_itflags;
808
+
809
+ if (!(itflags&NPY_ITFLAG_BUFFER)) {
810
+ return 0;
811
+ }
812
+
813
+ op_itflags = NIT_OPITFLAGS(iter);
814
+
815
+ /* If any operand requires a cast, buffering is mandatory */
816
+ for (iop = 0; iop < nop; ++iop) {
817
+ if (op_itflags[iop]&NPY_OP_ITFLAG_CAST) {
818
+ return 1;
819
+ }
820
+ }
821
+
822
+ return 0;
823
+ }
824
+
825
+ /*NUMPY_API
826
+ * Whether the iteration loop, and in particular the iternext()
827
+ * function, needs API access. If this is true, the GIL must
828
+ * be retained while iterating.
829
+ */
830
+ NPY_NO_EXPORT npy_bool
831
+ NpyIter_IterationNeedsAPI(NpyIter *iter)
832
+ {
833
+ return (NIT_ITFLAGS(iter)&NPY_ITFLAG_NEEDSAPI) != 0;
834
+ }
835
+
836
+ /*NUMPY_API
837
+ * Gets the number of dimensions being iterated
838
+ */
839
+ NPY_NO_EXPORT int
840
+ NpyIter_GetNDim(NpyIter *iter)
841
+ {
842
+ return NIT_NDIM(iter);
843
+ }
844
+
845
+ /*NUMPY_API
846
+ * Gets the number of operands being iterated
847
+ */
848
+ NPY_NO_EXPORT int
849
+ NpyIter_GetNOp(NpyIter *iter)
850
+ {
851
+ return NIT_NOP(iter);
852
+ }
853
+
854
+ /*NUMPY_API
855
+ * Gets the number of elements being iterated
856
+ */
857
+ NPY_NO_EXPORT npy_intp
858
+ NpyIter_GetIterSize(NpyIter *iter)
859
+ {
860
+ return NIT_ITERSIZE(iter);
861
+ }
862
+
863
+ /*NUMPY_API
864
+ * Whether the iterator is buffered
865
+ */
866
+ NPY_NO_EXPORT npy_bool
867
+ NpyIter_IsBuffered(NpyIter *iter)
868
+ {
869
+ return (NIT_ITFLAGS(iter)&NPY_ITFLAG_BUFFER) != 0;
870
+ }
871
+
872
+ /*NUMPY_API
873
+ * Whether the inner loop can grow if buffering is unneeded
874
+ */
875
+ NPY_NO_EXPORT npy_bool
876
+ NpyIter_IsGrowInner(NpyIter *iter)
877
+ {
878
+ return (NIT_ITFLAGS(iter)&NPY_ITFLAG_GROWINNER) != 0;
879
+ }
880
+
881
+ /*NUMPY_API
882
+ * Gets the size of the buffer, or 0 if buffering is not enabled
883
+ */
884
+ NPY_NO_EXPORT npy_intp
885
+ NpyIter_GetBufferSize(NpyIter *iter)
886
+ {
887
+ npy_uint32 itflags = NIT_ITFLAGS(iter);
888
+ /*int ndim = NIT_NDIM(iter);*/
889
+ int nop = NIT_NOP(iter);
890
+
891
+ if (itflags&NPY_ITFLAG_BUFFER) {
892
+ NpyIter_BufferData *bufferdata = NIT_BUFFERDATA(iter);
893
+ return NBF_BUFFERSIZE(bufferdata);
894
+ }
895
+ else {
896
+ return 0;
897
+ }
898
+
899
+ }
900
+
901
+ /*NUMPY_API
902
+ * Gets the range of iteration indices being iterated
903
+ */
904
+ NPY_NO_EXPORT void
905
+ NpyIter_GetIterIndexRange(NpyIter *iter,
906
+ npy_intp *istart, npy_intp *iend)
907
+ {
908
+ *istart = NIT_ITERSTART(iter);
909
+ *iend = NIT_ITEREND(iter);
910
+ }
911
+
912
+ /*NUMPY_API
913
+ * Gets the broadcast shape if a multi-index is being tracked by the iterator,
914
+ * otherwise gets the shape of the iteration as Fortran-order
915
+ * (fastest-changing index first).
916
+ *
917
+ * The reason Fortran-order is returned when a multi-index
918
+ * is not enabled is that this is providing a direct view into how
919
+ * the iterator traverses the n-dimensional space. The iterator organizes
920
+ * its memory from fastest index to slowest index, and when
921
+ * a multi-index is enabled, it uses a permutation to recover the original
922
+ * order.
923
+ *
924
+ * Returns NPY_SUCCEED or NPY_FAIL.
925
+ */
926
+ NPY_NO_EXPORT int
927
+ NpyIter_GetShape(NpyIter *iter, npy_intp *outshape)
928
+ {
929
+ npy_uint32 itflags = NIT_ITFLAGS(iter);
930
+ int ndim = NIT_NDIM(iter);
931
+ int nop = NIT_NOP(iter);
932
+
933
+ int idim, sizeof_axisdata;
934
+ NpyIter_AxisData *axisdata;
935
+ npy_int8 *perm;
936
+
937
+ axisdata = NIT_AXISDATA(iter);
938
+ sizeof_axisdata = NIT_AXISDATA_SIZEOF(itflags, ndim, nop);
939
+
940
+ if (itflags&NPY_ITFLAG_HASMULTIINDEX) {
941
+ perm = NIT_PERM(iter);
942
+ for(idim = 0; idim < ndim; ++idim) {
943
+ npy_int8 p = perm[idim];
944
+ if (p < 0) {
945
+ outshape[ndim+p] = NAD_SHAPE(axisdata);
946
+ }
947
+ else {
948
+ outshape[ndim-p-1] = NAD_SHAPE(axisdata);
949
+ }
950
+
951
+ NIT_ADVANCE_AXISDATA(axisdata, 1);
952
+ }
953
+ }
954
+ else {
955
+ for(idim = 0; idim < ndim; ++idim) {
956
+ outshape[idim] = NAD_SHAPE(axisdata);
957
+ NIT_ADVANCE_AXISDATA(axisdata, 1);
958
+ }
959
+ }
960
+
961
+ return NPY_SUCCEED;
962
+ }
963
+
964
+ /*NUMPY_API
965
+ * Builds a set of strides which are the same as the strides of an
966
+ * output array created using the NPY_ITER_ALLOCATE flag, where NULL
967
+ * was passed for op_axes. This is for data packed contiguously,
968
+ * but not necessarily in C or Fortran order. This should be used
969
+ * together with NpyIter_GetShape and NpyIter_GetNDim.
970
+ *
971
+ * A use case for this function is to match the shape and layout of
972
+ * the iterator and tack on one or more dimensions. For example,
973
+ * in order to generate a vector per input value for a numerical gradient,
974
+ * you pass in ndim*itemsize for itemsize, then add another dimension to
975
+ * the end with size ndim and stride itemsize. To do the Hessian matrix,
976
+ * you do the same thing but add two dimensions, or take advantage of
977
+ * the symmetry and pack it into 1 dimension with a particular encoding.
978
+ *
979
+ * This function may only be called if the iterator is tracking a multi-index
980
+ * and if NPY_ITER_DONT_NEGATE_STRIDES was used to prevent an axis from
981
+ * being iterated in reverse order.
982
+ *
983
+ * If an array is created with this method, simply adding 'itemsize'
984
+ * for each iteration will traverse the new array matching the
985
+ * iterator.
986
+ *
987
+ * Returns NPY_SUCCEED or NPY_FAIL.
988
+ */
989
+ NPY_NO_EXPORT int
990
+ NpyIter_CreateCompatibleStrides(NpyIter *iter,
991
+ npy_intp itemsize, npy_intp *outstrides)
992
+ {
993
+ npy_uint32 itflags = NIT_ITFLAGS(iter);
994
+ int idim, ndim = NIT_NDIM(iter);
995
+ int nop = NIT_NOP(iter);
996
+
997
+ npy_intp sizeof_axisdata;
998
+ NpyIter_AxisData *axisdata;
999
+ npy_int8 *perm;
1000
+
1001
+ if (!(itflags&NPY_ITFLAG_HASMULTIINDEX)) {
1002
+ PyErr_SetString(PyExc_RuntimeError,
1003
+ "Iterator CreateCompatibleStrides may only be called "
1004
+ "if a multi-index is being tracked");
1005
+ return NPY_FAIL;
1006
+ }
1007
+
1008
+ axisdata = NIT_AXISDATA(iter);
1009
+ sizeof_axisdata = NIT_AXISDATA_SIZEOF(itflags, ndim, nop);
1010
+
1011
+ perm = NIT_PERM(iter);
1012
+ for(idim = 0; idim < ndim; ++idim) {
1013
+ npy_int8 p = perm[idim];
1014
+ if (p < 0) {
1015
+ PyErr_SetString(PyExc_RuntimeError,
1016
+ "Iterator CreateCompatibleStrides may only be called "
1017
+ "if DONT_NEGATE_STRIDES was used to prevent reverse "
1018
+ "iteration of an axis");
1019
+ return NPY_FAIL;
1020
+ }
1021
+ else {
1022
+ outstrides[ndim-p-1] = itemsize;
1023
+ }
1024
+
1025
+ itemsize *= NAD_SHAPE(axisdata);
1026
+ NIT_ADVANCE_AXISDATA(axisdata, 1);
1027
+ }
1028
+
1029
+ return NPY_SUCCEED;
1030
+ }
1031
+
1032
+ /*NUMPY_API
1033
+ * Get the array of data pointers (1 per object being iterated)
1034
+ *
1035
+ * This function may be safely called without holding the Python GIL.
1036
+ */
1037
+ NPY_NO_EXPORT char **
1038
+ NpyIter_GetDataPtrArray(NpyIter *iter)
1039
+ {
1040
+ npy_uint32 itflags = NIT_ITFLAGS(iter);
1041
+ /*int ndim = NIT_NDIM(iter);*/
1042
+ int nop = NIT_NOP(iter);
1043
+
1044
+ if (itflags&NPY_ITFLAG_BUFFER) {
1045
+ NpyIter_BufferData *bufferdata = NIT_BUFFERDATA(iter);
1046
+ return NBF_PTRS(bufferdata);
1047
+ }
1048
+ else {
1049
+ NpyIter_AxisData *axisdata = NIT_AXISDATA(iter);
1050
+ return NAD_PTRS(axisdata);
1051
+ }
1052
+ }
1053
+
1054
+ /*NUMPY_API
1055
+ * Get the array of data pointers (1 per object being iterated),
1056
+ * directly into the arrays (never pointing to a buffer), for starting
1057
+ * unbuffered iteration. This always returns the addresses for the
1058
+ * iterator position as reset to iterator index 0.
1059
+ *
1060
+ * These pointers are different from the pointers accepted by
1061
+ * NpyIter_ResetBasePointers, because the direction along some
1062
+ * axes may have been reversed, requiring base offsets.
1063
+ *
1064
+ * This function may be safely called without holding the Python GIL.
1065
+ */
1066
+ NPY_NO_EXPORT char **
1067
+ NpyIter_GetInitialDataPtrArray(NpyIter *iter)
1068
+ {
1069
+ /*npy_uint32 itflags = NIT_ITFLAGS(iter);*/
1070
+ /*int ndim = NIT_NDIM(iter);*/
1071
+ int nop = NIT_NOP(iter);
1072
+
1073
+ return NIT_RESETDATAPTR(iter);
1074
+ }
1075
+
1076
+ /*NUMPY_API
1077
+ * Get the array of data type pointers (1 per object being iterated)
1078
+ */
1079
+ NPY_NO_EXPORT PyArray_Descr **
1080
+ NpyIter_GetDescrArray(NpyIter *iter)
1081
+ {
1082
+ /*npy_uint32 itflags = NIT_ITFLAGS(iter);*/
1083
+ /*int ndim = NIT_NDIM(iter);*/
1084
+ /*int nop = NIT_NOP(iter);*/
1085
+
1086
+ return NIT_DTYPES(iter);
1087
+ }
1088
+
1089
+ /*NUMPY_API
1090
+ * Get the array of objects being iterated
1091
+ */
1092
+ NPY_NO_EXPORT PyArrayObject **
1093
+ NpyIter_GetOperandArray(NpyIter *iter)
1094
+ {
1095
+ /*npy_uint32 itflags = NIT_ITFLAGS(iter);*/
1096
+ /*int ndim = NIT_NDIM(iter);*/
1097
+ int nop = NIT_NOP(iter);
1098
+
1099
+ return NIT_OPERANDS(iter);
1100
+ }
1101
+
1102
+ /*NUMPY_API
1103
+ * Returns a view to the i-th object with the iterator's internal axes
1104
+ */
1105
+ NPY_NO_EXPORT PyArrayObject *
1106
+ NpyIter_GetIterView(NpyIter *iter, npy_intp i)
1107
+ {
1108
+ npy_uint32 itflags = NIT_ITFLAGS(iter);
1109
+ int idim, ndim = NIT_NDIM(iter);
1110
+ int nop = NIT_NOP(iter);
1111
+
1112
+ npy_intp shape[NPY_MAXDIMS], strides[NPY_MAXDIMS];
1113
+ PyArrayObject *obj, *view;
1114
+ PyArray_Descr *dtype;
1115
+ char *dataptr;
1116
+ NpyIter_AxisData *axisdata;
1117
+ npy_intp sizeof_axisdata;
1118
+ int writeable;
1119
+
1120
+ if (i < 0) {
1121
+ PyErr_SetString(PyExc_IndexError,
1122
+ "index provided for an iterator view was out of bounds");
1123
+ return NULL;
1124
+ }
1125
+
1126
+ /* Don't provide views if buffering is enabled */
1127
+ if (itflags&NPY_ITFLAG_BUFFER) {
1128
+ PyErr_SetString(PyExc_ValueError,
1129
+ "cannot provide an iterator view when buffering is enabled");
1130
+ return NULL;
1131
+ }
1132
+
1133
+ obj = NIT_OPERANDS(iter)[i];
1134
+ dtype = PyArray_DESCR(obj);
1135
+ writeable = NIT_OPITFLAGS(iter)[i]&NPY_OP_ITFLAG_WRITE;
1136
+ dataptr = NIT_RESETDATAPTR(iter)[i];
1137
+ axisdata = NIT_AXISDATA(iter);
1138
+ sizeof_axisdata = NIT_AXISDATA_SIZEOF(itflags, ndim, nop);
1139
+
1140
+ /* Retrieve the shape and strides from the axisdata */
1141
+ for (idim = 0; idim < ndim; ++idim) {
1142
+ shape[ndim-idim-1] = NAD_SHAPE(axisdata);
1143
+ strides[ndim-idim-1] = NAD_STRIDES(axisdata)[i];
1144
+
1145
+ NIT_ADVANCE_AXISDATA(axisdata, 1);
1146
+ }
1147
+
1148
+ Py_INCREF(dtype);
1149
+ view = (PyArrayObject *)PyArray_NewFromDescr(&PyArray_Type, dtype, ndim,
1150
+ shape, strides, dataptr,
1151
+ writeable ? NPY_ARRAY_WRITEABLE : 0,
1152
+ NULL);
1153
+ if (view == NULL) {
1154
+ return NULL;
1155
+ }
1156
+ /* Tell the view who owns the data */
1157
+ Py_INCREF(obj);
1158
+ if (PyArray_SetBaseObject(view, (PyObject *)obj) < 0) {
1159
+ Py_DECREF(view);
1160
+ return NULL;
1161
+ }
1162
+ /* Make sure all the flags are good */
1163
+ PyArray_UpdateFlags(view, NPY_ARRAY_UPDATE_ALL);
1164
+
1165
+ return view;
1166
+ }
1167
+
1168
+ /*NUMPY_API
1169
+ * Get a pointer to the index, if it is being tracked
1170
+ */
1171
+ NPY_NO_EXPORT npy_intp *
1172
+ NpyIter_GetIndexPtr(NpyIter *iter)
1173
+ {
1174
+ npy_uint32 itflags = NIT_ITFLAGS(iter);
1175
+ /*int ndim = NIT_NDIM(iter);*/
1176
+ int nop = NIT_NOP(iter);
1177
+
1178
+ NpyIter_AxisData *axisdata = NIT_AXISDATA(iter);
1179
+
1180
+ if (itflags&NPY_ITFLAG_HASINDEX) {
1181
+ /* The index is just after the data pointers */
1182
+ return (npy_intp*)NAD_PTRS(axisdata) + nop;
1183
+ }
1184
+ else {
1185
+ return NULL;
1186
+ }
1187
+ }
1188
+
1189
+ /*NUMPY_API
1190
+ * Gets an array of read flags (1 per object being iterated)
1191
+ */
1192
+ NPY_NO_EXPORT void
1193
+ NpyIter_GetReadFlags(NpyIter *iter, char *outreadflags)
1194
+ {
1195
+ /*npy_uint32 itflags = NIT_ITFLAGS(iter);*/
1196
+ /*int ndim = NIT_NDIM(iter);*/
1197
+ int iop, nop = NIT_NOP(iter);
1198
+
1199
+ npyiter_opitflags *op_itflags = NIT_OPITFLAGS(iter);
1200
+
1201
+ for (iop = 0; iop < nop; ++iop) {
1202
+ outreadflags[iop] = (op_itflags[iop]&NPY_OP_ITFLAG_READ) != 0;
1203
+ }
1204
+ }
1205
+
1206
+ /*NUMPY_API
1207
+ * Gets an array of write flags (1 per object being iterated)
1208
+ */
1209
+ NPY_NO_EXPORT void
1210
+ NpyIter_GetWriteFlags(NpyIter *iter, char *outwriteflags)
1211
+ {
1212
+ /*npy_uint32 itflags = NIT_ITFLAGS(iter);*/
1213
+ /*int ndim = NIT_NDIM(iter);*/
1214
+ int iop, nop = NIT_NOP(iter);
1215
+
1216
+ npyiter_opitflags *op_itflags = NIT_OPITFLAGS(iter);
1217
+
1218
+ for (iop = 0; iop < nop; ++iop) {
1219
+ outwriteflags[iop] = (op_itflags[iop]&NPY_OP_ITFLAG_WRITE) != 0;
1220
+ }
1221
+ }
1222
+
1223
+
1224
+ /*NUMPY_API
1225
+ * Get the array of strides for the inner loop (when HasExternalLoop is true)
1226
+ *
1227
+ * This function may be safely called without holding the Python GIL.
1228
+ */
1229
+ NPY_NO_EXPORT npy_intp *
1230
+ NpyIter_GetInnerStrideArray(NpyIter *iter)
1231
+ {
1232
+ npy_uint32 itflags = NIT_ITFLAGS(iter);
1233
+ /*int ndim = NIT_NDIM(iter);*/
1234
+ int nop = NIT_NOP(iter);
1235
+
1236
+ if (itflags&NPY_ITFLAG_BUFFER) {
1237
+ NpyIter_BufferData *data = NIT_BUFFERDATA(iter);
1238
+ return NBF_STRIDES(data);
1239
+ }
1240
+ else {
1241
+ NpyIter_AxisData *axisdata = NIT_AXISDATA(iter);
1242
+ return NAD_STRIDES(axisdata);
1243
+ }
1244
+ }
1245
+
1246
+ /*NUMPY_API
1247
+ * Gets the array of strides for the specified axis.
1248
+ * If the iterator is tracking a multi-index, gets the strides
1249
+ * for the axis specified, otherwise gets the strides for
1250
+ * the iteration axis as Fortran order (fastest-changing axis first).
1251
+ *
1252
+ * Returns NULL if an error occurs.
1253
+ */
1254
+ NPY_NO_EXPORT npy_intp *
1255
+ NpyIter_GetAxisStrideArray(NpyIter *iter, int axis)
1256
+ {
1257
+ npy_uint32 itflags = NIT_ITFLAGS(iter);
1258
+ int idim, ndim = NIT_NDIM(iter);
1259
+ int nop = NIT_NOP(iter);
1260
+
1261
+ npy_int8 *perm = NIT_PERM(iter);
1262
+ NpyIter_AxisData *axisdata = NIT_AXISDATA(iter);
1263
+ npy_intp sizeof_axisdata = NIT_AXISDATA_SIZEOF(itflags, ndim, nop);
1264
+
1265
+ if (axis < 0 || axis >= ndim) {
1266
+ PyErr_SetString(PyExc_ValueError,
1267
+ "axis out of bounds in iterator GetStrideAxisArray");
1268
+ return NULL;
1269
+ }
1270
+
1271
+ if (itflags&NPY_ITFLAG_HASMULTIINDEX) {
1272
+ /* Reverse axis, since the iterator treats them that way */
1273
+ axis = ndim-1-axis;
1274
+
1275
+ /* First find the axis in question */
1276
+ for (idim = 0; idim < ndim; ++idim, NIT_ADVANCE_AXISDATA(axisdata, 1)) {
1277
+ if (perm[idim] == axis || -1 - perm[idim] == axis) {
1278
+ return NAD_STRIDES(axisdata);
1279
+ }
1280
+ }
1281
+ }
1282
+ else {
1283
+ return NAD_STRIDES(NIT_INDEX_AXISDATA(axisdata, axis));
1284
+ }
1285
+
1286
+ PyErr_SetString(PyExc_RuntimeError,
1287
+ "internal error in iterator perm");
1288
+ return NULL;
1289
+ }
1290
+
1291
+ /*NUMPY_API
1292
+ * Get an array of strides which are fixed. Any strides which may
1293
+ * change during iteration receive the value NPY_MAX_INTP. Once
1294
+ * the iterator is ready to iterate, call this to get the strides
1295
+ * which will always be fixed in the inner loop, then choose optimized
1296
+ * inner loop functions which take advantage of those fixed strides.
1297
+ *
1298
+ * This function may be safely called without holding the Python GIL.
1299
+ */
1300
+ NPY_NO_EXPORT void
1301
+ NpyIter_GetInnerFixedStrideArray(NpyIter *iter, npy_intp *out_strides)
1302
+ {
1303
+ npy_uint32 itflags = NIT_ITFLAGS(iter);
1304
+ int ndim = NIT_NDIM(iter);
1305
+ int iop, nop = NIT_NOP(iter);
1306
+
1307
+ NpyIter_AxisData *axisdata0 = NIT_AXISDATA(iter);
1308
+ npy_intp sizeof_axisdata = NIT_AXISDATA_SIZEOF(itflags, ndim, nop);
1309
+
1310
+ if (itflags&NPY_ITFLAG_BUFFER) {
1311
+ NpyIter_BufferData *data = NIT_BUFFERDATA(iter);
1312
+ npyiter_opitflags *op_itflags = NIT_OPITFLAGS(iter);
1313
+ npy_intp stride, *strides = NBF_STRIDES(data),
1314
+ *ad_strides = NAD_STRIDES(axisdata0);
1315
+ PyArray_Descr **dtypes = NIT_DTYPES(iter);
1316
+
1317
+ for (iop = 0; iop < nop; ++iop) {
1318
+ stride = strides[iop];
1319
+ /*
1320
+ * Operands which are always/never buffered have fixed strides,
1321
+ * and everything has fixed strides when ndim is 0 or 1
1322
+ */
1323
+ if (ndim <= 1 || (op_itflags[iop]&
1324
+ (NPY_OP_ITFLAG_CAST|NPY_OP_ITFLAG_BUFNEVER))) {
1325
+ out_strides[iop] = stride;
1326
+ }
1327
+ /* If it's a reduction, 0-stride inner loop may have fixed stride */
1328
+ else if (stride == 0 && (itflags&NPY_ITFLAG_REDUCE)) {
1329
+ /* If it's a reduction operand, definitely fixed stride */
1330
+ if (op_itflags[iop]&NPY_OP_ITFLAG_REDUCE) {
1331
+ out_strides[iop] = stride;
1332
+ }
1333
+ /*
1334
+ * Otherwise it's guaranteed to be a fixed stride if the
1335
+ * stride is 0 for all the dimensions.
1336
+ */
1337
+ else {
1338
+ NpyIter_AxisData *axisdata = axisdata0;
1339
+ int idim;
1340
+ for (idim = 0; idim < ndim; ++idim) {
1341
+ if (NAD_STRIDES(axisdata)[iop] != 0) {
1342
+ break;
1343
+ }
1344
+ NIT_ADVANCE_AXISDATA(axisdata, 1);
1345
+ }
1346
+ /* If all the strides were 0, the stride won't change */
1347
+ if (idim == ndim) {
1348
+ out_strides[iop] = stride;
1349
+ }
1350
+ else {
1351
+ out_strides[iop] = NPY_MAX_INTP;
1352
+ }
1353
+ }
1354
+ }
1355
+ /*
1356
+ * Inner loop contiguous array means its stride won't change when
1357
+ * switching between buffering and not buffering
1358
+ */
1359
+ else if (ad_strides[iop] == dtypes[iop]->elsize) {
1360
+ out_strides[iop] = ad_strides[iop];
1361
+ }
1362
+ /*
1363
+ * Otherwise the strides can change if the operand is sometimes
1364
+ * buffered, sometimes not.
1365
+ */
1366
+ else {
1367
+ out_strides[iop] = NPY_MAX_INTP;
1368
+ }
1369
+ }
1370
+ }
1371
+ else {
1372
+ /* If there's no buffering, the strides are always fixed */
1373
+ memcpy(out_strides, NAD_STRIDES(axisdata0), nop*NPY_SIZEOF_INTP);
1374
+ }
1375
+ }
1376
+
1377
+ /*NUMPY_API
1378
+ * Get a pointer to the size of the inner loop (when HasExternalLoop is true)
1379
+ *
1380
+ * This function may be safely called without holding the Python GIL.
1381
+ */
1382
+ NPY_NO_EXPORT npy_intp *
1383
+ NpyIter_GetInnerLoopSizePtr(NpyIter *iter)
1384
+ {
1385
+ npy_uint32 itflags = NIT_ITFLAGS(iter);
1386
+ /*int ndim = NIT_NDIM(iter);*/
1387
+ int nop = NIT_NOP(iter);
1388
+
1389
+ if (itflags&NPY_ITFLAG_BUFFER) {
1390
+ NpyIter_BufferData *data = NIT_BUFFERDATA(iter);
1391
+ return &NBF_SIZE(data);
1392
+ }
1393
+ else {
1394
+ NpyIter_AxisData *axisdata = NIT_AXISDATA(iter);
1395
+ return &NAD_SHAPE(axisdata);
1396
+ }
1397
+ }
1398
+
1399
+ /*NUMPY_API
1400
+ * For debugging
1401
+ */
1402
+ NPY_NO_EXPORT void
1403
+ NpyIter_DebugPrint(NpyIter *iter)
1404
+ {
1405
+ npy_uint32 itflags = NIT_ITFLAGS(iter);
1406
+ int idim, ndim = NIT_NDIM(iter);
1407
+ int iop, nop = NIT_NOP(iter);
1408
+
1409
+ NpyIter_AxisData *axisdata;
1410
+ npy_intp sizeof_axisdata;
1411
+
1412
+ NPY_ALLOW_C_API_DEF
1413
+ NPY_ALLOW_C_API
1414
+
1415
+ printf("\n------ BEGIN ITERATOR DUMP ------\n");
1416
+ printf("| Iterator Address: %p\n", (void *)iter);
1417
+ printf("| ItFlags: ");
1418
+ if (itflags&NPY_ITFLAG_IDENTPERM)
1419
+ printf("IDENTPERM ");
1420
+ if (itflags&NPY_ITFLAG_NEGPERM)
1421
+ printf("NEGPERM ");
1422
+ if (itflags&NPY_ITFLAG_HASINDEX)
1423
+ printf("HASINDEX ");
1424
+ if (itflags&NPY_ITFLAG_HASMULTIINDEX)
1425
+ printf("HASMULTIINDEX ");
1426
+ if (itflags&NPY_ITFLAG_FORCEDORDER)
1427
+ printf("FORCEDORDER ");
1428
+ if (itflags&NPY_ITFLAG_EXLOOP)
1429
+ printf("EXLOOP ");
1430
+ if (itflags&NPY_ITFLAG_RANGE)
1431
+ printf("RANGE ");
1432
+ if (itflags&NPY_ITFLAG_BUFFER)
1433
+ printf("BUFFER ");
1434
+ if (itflags&NPY_ITFLAG_GROWINNER)
1435
+ printf("GROWINNER ");
1436
+ if (itflags&NPY_ITFLAG_ONEITERATION)
1437
+ printf("ONEITERATION ");
1438
+ if (itflags&NPY_ITFLAG_DELAYBUF)
1439
+ printf("DELAYBUF ");
1440
+ if (itflags&NPY_ITFLAG_NEEDSAPI)
1441
+ printf("NEEDSAPI ");
1442
+ if (itflags&NPY_ITFLAG_REDUCE)
1443
+ printf("REDUCE ");
1444
+ if (itflags&NPY_ITFLAG_REUSE_REDUCE_LOOPS)
1445
+ printf("REUSE_REDUCE_LOOPS ");
1446
+
1447
+ printf("\n");
1448
+ printf("| NDim: %d\n", (int)ndim);
1449
+ printf("| NOp: %d\n", (int)nop);
1450
+ if (NIT_MASKOP(iter) >= 0) {
1451
+ printf("| MaskOp: %d\n", (int)NIT_MASKOP(iter));
1452
+ }
1453
+ printf("| IterSize: %d\n", (int)NIT_ITERSIZE(iter));
1454
+ printf("| IterStart: %d\n", (int)NIT_ITERSTART(iter));
1455
+ printf("| IterEnd: %d\n", (int)NIT_ITEREND(iter));
1456
+ printf("| IterIndex: %d\n", (int)NIT_ITERINDEX(iter));
1457
+ printf("| Iterator SizeOf: %d\n",
1458
+ (int)NIT_SIZEOF_ITERATOR(itflags, ndim, nop));
1459
+ printf("| BufferData SizeOf: %d\n",
1460
+ (int)NIT_BUFFERDATA_SIZEOF(itflags, ndim, nop));
1461
+ printf("| AxisData SizeOf: %d\n",
1462
+ (int)NIT_AXISDATA_SIZEOF(itflags, ndim, nop));
1463
+ printf("|\n");
1464
+
1465
+ printf("| Perm: ");
1466
+ for (idim = 0; idim < ndim; ++idim) {
1467
+ printf("%d ", (int)NIT_PERM(iter)[idim]);
1468
+ }
1469
+ printf("\n");
1470
+ printf("| DTypes: ");
1471
+ for (iop = 0; iop < nop; ++iop) {
1472
+ printf("%p ", (void *)NIT_DTYPES(iter)[iop]);
1473
+ }
1474
+ printf("\n");
1475
+ printf("| DTypes: ");
1476
+ for (iop = 0; iop < nop; ++iop) {
1477
+ if (NIT_DTYPES(iter)[iop] != NULL)
1478
+ PyObject_Print((PyObject*)NIT_DTYPES(iter)[iop], stdout, 0);
1479
+ else
1480
+ printf("(nil) ");
1481
+ printf(" ");
1482
+ }
1483
+ printf("\n");
1484
+ printf("| InitDataPtrs: ");
1485
+ for (iop = 0; iop < nop; ++iop) {
1486
+ printf("%p ", (void *)NIT_RESETDATAPTR(iter)[iop]);
1487
+ }
1488
+ printf("\n");
1489
+ printf("| BaseOffsets: ");
1490
+ for (iop = 0; iop < nop; ++iop) {
1491
+ printf("%i ", (int)NIT_BASEOFFSETS(iter)[iop]);
1492
+ }
1493
+ printf("\n");
1494
+ if (itflags&NPY_ITFLAG_HASINDEX) {
1495
+ printf("| InitIndex: %d\n",
1496
+ (int)(npy_intp)NIT_RESETDATAPTR(iter)[nop]);
1497
+ }
1498
+ printf("| Operands: ");
1499
+ for (iop = 0; iop < nop; ++iop) {
1500
+ printf("%p ", (void *)NIT_OPERANDS(iter)[iop]);
1501
+ }
1502
+ printf("\n");
1503
+ printf("| Operand DTypes: ");
1504
+ for (iop = 0; iop < nop; ++iop) {
1505
+ PyArray_Descr *dtype;
1506
+ if (NIT_OPERANDS(iter)[iop] != NULL) {
1507
+ dtype = PyArray_DESCR(NIT_OPERANDS(iter)[iop]);
1508
+ if (dtype != NULL)
1509
+ PyObject_Print((PyObject *)dtype, stdout, 0);
1510
+ else
1511
+ printf("(nil) ");
1512
+ }
1513
+ else {
1514
+ printf("(op nil) ");
1515
+ }
1516
+ printf(" ");
1517
+ }
1518
+ printf("\n");
1519
+ printf("| OpItFlags:\n");
1520
+ for (iop = 0; iop < nop; ++iop) {
1521
+ printf("| Flags[%d]: ", (int)iop);
1522
+ if ((NIT_OPITFLAGS(iter)[iop])&NPY_OP_ITFLAG_READ)
1523
+ printf("READ ");
1524
+ if ((NIT_OPITFLAGS(iter)[iop])&NPY_OP_ITFLAG_WRITE)
1525
+ printf("WRITE ");
1526
+ if ((NIT_OPITFLAGS(iter)[iop])&NPY_OP_ITFLAG_CAST)
1527
+ printf("CAST ");
1528
+ if ((NIT_OPITFLAGS(iter)[iop])&NPY_OP_ITFLAG_BUFNEVER)
1529
+ printf("BUFNEVER ");
1530
+ if ((NIT_OPITFLAGS(iter)[iop])&NPY_OP_ITFLAG_ALIGNED)
1531
+ printf("ALIGNED ");
1532
+ if ((NIT_OPITFLAGS(iter)[iop])&NPY_OP_ITFLAG_REDUCE)
1533
+ printf("REDUCE ");
1534
+ if ((NIT_OPITFLAGS(iter)[iop])&NPY_OP_ITFLAG_VIRTUAL)
1535
+ printf("VIRTUAL ");
1536
+ if ((NIT_OPITFLAGS(iter)[iop])&NPY_OP_ITFLAG_WRITEMASKED)
1537
+ printf("WRITEMASKED ");
1538
+ printf("\n");
1539
+ }
1540
+ printf("|\n");
1541
+
1542
+ if (itflags&NPY_ITFLAG_BUFFER) {
1543
+ NpyIter_BufferData *bufferdata = NIT_BUFFERDATA(iter);
1544
+ printf("| BufferData:\n");
1545
+ printf("| BufferSize: %d\n", (int)NBF_BUFFERSIZE(bufferdata));
1546
+ printf("| Size: %d\n", (int)NBF_SIZE(bufferdata));
1547
+ printf("| BufIterEnd: %d\n", (int)NBF_BUFITEREND(bufferdata));
1548
+ if (itflags&NPY_ITFLAG_REDUCE) {
1549
+ printf("| REDUCE Pos: %d\n",
1550
+ (int)NBF_REDUCE_POS(bufferdata));
1551
+ printf("| REDUCE OuterSize: %d\n",
1552
+ (int)NBF_REDUCE_OUTERSIZE(bufferdata));
1553
+ printf("| REDUCE OuterDim: %d\n",
1554
+ (int)NBF_REDUCE_OUTERDIM(bufferdata));
1555
+ }
1556
+ printf("| Strides: ");
1557
+ for (iop = 0; iop < nop; ++iop)
1558
+ printf("%d ", (int)NBF_STRIDES(bufferdata)[iop]);
1559
+ printf("\n");
1560
+ /* Print the fixed strides when there's no inner loop */
1561
+ if (itflags&NPY_ITFLAG_EXLOOP) {
1562
+ npy_intp fixedstrides[NPY_MAXDIMS];
1563
+ printf("| Fixed Strides: ");
1564
+ NpyIter_GetInnerFixedStrideArray(iter, fixedstrides);
1565
+ for (iop = 0; iop < nop; ++iop)
1566
+ printf("%d ", (int)fixedstrides[iop]);
1567
+ printf("\n");
1568
+ }
1569
+ printf("| Ptrs: ");
1570
+ for (iop = 0; iop < nop; ++iop)
1571
+ printf("%p ", (void *)NBF_PTRS(bufferdata)[iop]);
1572
+ printf("\n");
1573
+ if (itflags&NPY_ITFLAG_REDUCE) {
1574
+ printf("| REDUCE Outer Strides: ");
1575
+ for (iop = 0; iop < nop; ++iop)
1576
+ printf("%d ", (int)NBF_REDUCE_OUTERSTRIDES(bufferdata)[iop]);
1577
+ printf("\n");
1578
+ printf("| REDUCE Outer Ptrs: ");
1579
+ for (iop = 0; iop < nop; ++iop)
1580
+ printf("%p ", (void *)NBF_REDUCE_OUTERPTRS(bufferdata)[iop]);
1581
+ printf("\n");
1582
+ }
1583
+ printf("| ReadTransferFn: ");
1584
+ for (iop = 0; iop < nop; ++iop)
1585
+ printf("%p ", (void *)NBF_READTRANSFERFN(bufferdata)[iop]);
1586
+ printf("\n");
1587
+ printf("| ReadTransferData: ");
1588
+ for (iop = 0; iop < nop; ++iop)
1589
+ printf("%p ", (void *)NBF_READTRANSFERDATA(bufferdata)[iop]);
1590
+ printf("\n");
1591
+ printf("| WriteTransferFn: ");
1592
+ for (iop = 0; iop < nop; ++iop)
1593
+ printf("%p ", (void *)NBF_WRITETRANSFERFN(bufferdata)[iop]);
1594
+ printf("\n");
1595
+ printf("| WriteTransferData: ");
1596
+ for (iop = 0; iop < nop; ++iop)
1597
+ printf("%p ", (void *)NBF_WRITETRANSFERDATA(bufferdata)[iop]);
1598
+ printf("\n");
1599
+ printf("| Buffers: ");
1600
+ for (iop = 0; iop < nop; ++iop)
1601
+ printf("%p ", (void *)NBF_BUFFERS(bufferdata)[iop]);
1602
+ printf("\n");
1603
+ printf("|\n");
1604
+ }
1605
+
1606
+ axisdata = NIT_AXISDATA(iter);
1607
+ sizeof_axisdata = NIT_AXISDATA_SIZEOF(itflags, ndim, nop);
1608
+ for (idim = 0; idim < ndim; ++idim, NIT_ADVANCE_AXISDATA(axisdata, 1)) {
1609
+ printf("| AxisData[%d]:\n", (int)idim);
1610
+ printf("| Shape: %d\n", (int)NAD_SHAPE(axisdata));
1611
+ printf("| Index: %d\n", (int)NAD_INDEX(axisdata));
1612
+ printf("| Strides: ");
1613
+ for (iop = 0; iop < nop; ++iop) {
1614
+ printf("%d ", (int)NAD_STRIDES(axisdata)[iop]);
1615
+ }
1616
+ printf("\n");
1617
+ if (itflags&NPY_ITFLAG_HASINDEX) {
1618
+ printf("| Index Stride: %d\n", (int)NAD_STRIDES(axisdata)[nop]);
1619
+ }
1620
+ printf("| Ptrs: ");
1621
+ for (iop = 0; iop < nop; ++iop) {
1622
+ printf("%p ", (void *)NAD_PTRS(axisdata)[iop]);
1623
+ }
1624
+ printf("\n");
1625
+ if (itflags&NPY_ITFLAG_HASINDEX) {
1626
+ printf("| Index Value: %d\n",
1627
+ (int)((npy_intp*)NAD_PTRS(axisdata))[nop]);
1628
+ }
1629
+ }
1630
+
1631
+ printf("------- END ITERATOR DUMP -------\n");
1632
+ fflush(stdout);
1633
+
1634
+ NPY_DISABLE_C_API
1635
+ }
1636
+
1637
+ NPY_NO_EXPORT void
1638
+ npyiter_coalesce_axes(NpyIter *iter)
1639
+ {
1640
+ npy_uint32 itflags = NIT_ITFLAGS(iter);
1641
+ int idim, ndim = NIT_NDIM(iter);
1642
+ int nop = NIT_NOP(iter);
1643
+
1644
+ npy_intp istrides, nstrides = NAD_NSTRIDES();
1645
+ NpyIter_AxisData *axisdata = NIT_AXISDATA(iter);
1646
+ npy_intp sizeof_axisdata = NIT_AXISDATA_SIZEOF(itflags, ndim, nop);
1647
+ NpyIter_AxisData *ad_compress;
1648
+ npy_intp new_ndim = 1;
1649
+
1650
+ /* The HASMULTIINDEX or IDENTPERM flags do not apply after coalescing */
1651
+ NIT_ITFLAGS(iter) &= ~(NPY_ITFLAG_IDENTPERM|NPY_ITFLAG_HASMULTIINDEX);
1652
+
1653
+ axisdata = NIT_AXISDATA(iter);
1654
+ ad_compress = axisdata;
1655
+
1656
+ for (idim = 0; idim < ndim-1; ++idim) {
1657
+ int can_coalesce = 1;
1658
+ npy_intp shape0 = NAD_SHAPE(ad_compress);
1659
+ npy_intp shape1 = NAD_SHAPE(NIT_INDEX_AXISDATA(axisdata, 1));
1660
+ npy_intp *strides0 = NAD_STRIDES(ad_compress);
1661
+ npy_intp *strides1 = NAD_STRIDES(NIT_INDEX_AXISDATA(axisdata, 1));
1662
+
1663
+ /* Check that all the axes can be coalesced */
1664
+ for (istrides = 0; istrides < nstrides; ++istrides) {
1665
+ if (!((shape0 == 1 && strides0[istrides] == 0) ||
1666
+ (shape1 == 1 && strides1[istrides] == 0)) &&
1667
+ (strides0[istrides]*shape0 != strides1[istrides])) {
1668
+ can_coalesce = 0;
1669
+ break;
1670
+ }
1671
+ }
1672
+
1673
+ if (can_coalesce) {
1674
+ npy_intp *strides = NAD_STRIDES(ad_compress);
1675
+
1676
+ NIT_ADVANCE_AXISDATA(axisdata, 1);
1677
+ NAD_SHAPE(ad_compress) *= NAD_SHAPE(axisdata);
1678
+ for (istrides = 0; istrides < nstrides; ++istrides) {
1679
+ if (strides[istrides] == 0) {
1680
+ strides[istrides] = NAD_STRIDES(axisdata)[istrides];
1681
+ }
1682
+ }
1683
+ }
1684
+ else {
1685
+ NIT_ADVANCE_AXISDATA(axisdata, 1);
1686
+ NIT_ADVANCE_AXISDATA(ad_compress, 1);
1687
+ if (ad_compress != axisdata) {
1688
+ memcpy(ad_compress, axisdata, sizeof_axisdata);
1689
+ }
1690
+ ++new_ndim;
1691
+ }
1692
+ }
1693
+
1694
+ /*
1695
+ * If the number of axes shrunk, reset the perm and
1696
+ * compress the data into the new layout.
1697
+ */
1698
+ if (new_ndim < ndim) {
1699
+ npy_int8 *perm = NIT_PERM(iter);
1700
+
1701
+ /* Reset to an identity perm */
1702
+ for (idim = 0; idim < new_ndim; ++idim) {
1703
+ perm[idim] = (npy_int8)idim;
1704
+ }
1705
+ NIT_NDIM(iter) = new_ndim;
1706
+ }
1707
+ }
1708
+
1709
+ /*
1710
+ * If errmsg is non-NULL, it should point to a variable which will
1711
+ * receive the error message, and no Python exception will be set.
1712
+ * This is so that the function can be called from code not holding
1713
+ * the GIL.
1714
+ */
1715
+ NPY_NO_EXPORT int
1716
+ npyiter_allocate_buffers(NpyIter *iter, char **errmsg)
1717
+ {
1718
+ /*npy_uint32 itflags = NIT_ITFLAGS(iter);*/
1719
+ /*int ndim = NIT_NDIM(iter);*/
1720
+ int iop = 0, nop = NIT_NOP(iter);
1721
+
1722
+ npy_intp i;
1723
+ npyiter_opitflags *op_itflags = NIT_OPITFLAGS(iter);
1724
+ NpyIter_BufferData *bufferdata = NIT_BUFFERDATA(iter);
1725
+ PyArray_Descr **op_dtype = NIT_DTYPES(iter);
1726
+ npy_intp buffersize = NBF_BUFFERSIZE(bufferdata);
1727
+ char *buffer, **buffers = NBF_BUFFERS(bufferdata);
1728
+
1729
+ for (iop = 0; iop < nop; ++iop) {
1730
+ npyiter_opitflags flags = op_itflags[iop];
1731
+
1732
+ /*
1733
+ * If we have determined that a buffer may be needed,
1734
+ * allocate one.
1735
+ */
1736
+ if (!(flags&NPY_OP_ITFLAG_BUFNEVER)) {
1737
+ npy_intp itemsize = op_dtype[iop]->elsize;
1738
+ buffer = PyArray_malloc(itemsize*buffersize);
1739
+ if (buffer == NULL) {
1740
+ if (errmsg == NULL) {
1741
+ PyErr_NoMemory();
1742
+ }
1743
+ else {
1744
+ *errmsg = "out of memory";
1745
+ }
1746
+ goto fail;
1747
+ }
1748
+ buffers[iop] = buffer;
1749
+ }
1750
+ }
1751
+
1752
+ return 1;
1753
+
1754
+ fail:
1755
+ for (i = 0; i < iop; ++i) {
1756
+ if (buffers[i] != NULL) {
1757
+ PyArray_free(buffers[i]);
1758
+ buffers[i] = NULL;
1759
+ }
1760
+ }
1761
+ return 0;
1762
+ }
1763
+
1764
+ /*
1765
+ * This sets the AXISDATA portion of the iterator to the specified
1766
+ * iterindex, updating the pointers as well. This function does
1767
+ * no error checking.
1768
+ */
1769
+ NPY_NO_EXPORT void
1770
+ npyiter_goto_iterindex(NpyIter *iter, npy_intp iterindex)
1771
+ {
1772
+ npy_uint32 itflags = NIT_ITFLAGS(iter);
1773
+ int idim, ndim = NIT_NDIM(iter);
1774
+ int nop = NIT_NOP(iter);
1775
+
1776
+ char **dataptr;
1777
+ NpyIter_AxisData *axisdata;
1778
+ npy_intp sizeof_axisdata;
1779
+ npy_intp istrides, nstrides, i, shape;
1780
+
1781
+ axisdata = NIT_AXISDATA(iter);
1782
+ sizeof_axisdata = NIT_AXISDATA_SIZEOF(itflags, ndim, nop);
1783
+ nstrides = NAD_NSTRIDES();
1784
+
1785
+ NIT_ITERINDEX(iter) = iterindex;
1786
+
1787
+ ndim = ndim ? ndim : 1;
1788
+
1789
+ if (iterindex == 0) {
1790
+ dataptr = NIT_RESETDATAPTR(iter);
1791
+
1792
+ for (idim = 0; idim < ndim; ++idim) {
1793
+ char **ptrs;
1794
+ NAD_INDEX(axisdata) = 0;
1795
+ ptrs = NAD_PTRS(axisdata);
1796
+ for (istrides = 0; istrides < nstrides; ++istrides) {
1797
+ ptrs[istrides] = dataptr[istrides];
1798
+ }
1799
+
1800
+ NIT_ADVANCE_AXISDATA(axisdata, 1);
1801
+ }
1802
+ }
1803
+ else {
1804
+ /*
1805
+ * Set the multi-index, from the fastest-changing to the
1806
+ * slowest-changing.
1807
+ */
1808
+ axisdata = NIT_AXISDATA(iter);
1809
+ shape = NAD_SHAPE(axisdata);
1810
+ i = iterindex;
1811
+ iterindex /= shape;
1812
+ NAD_INDEX(axisdata) = i - iterindex * shape;
1813
+ for (idim = 0; idim < ndim-1; ++idim) {
1814
+ NIT_ADVANCE_AXISDATA(axisdata, 1);
1815
+
1816
+ shape = NAD_SHAPE(axisdata);
1817
+ i = iterindex;
1818
+ iterindex /= shape;
1819
+ NAD_INDEX(axisdata) = i - iterindex * shape;
1820
+ }
1821
+
1822
+ dataptr = NIT_RESETDATAPTR(iter);
1823
+
1824
+ /*
1825
+ * Accumulate the successive pointers with their
1826
+ * offsets in the opposite order, starting from the
1827
+ * original data pointers.
1828
+ */
1829
+ for (idim = 0; idim < ndim; ++idim) {
1830
+ npy_intp *strides;
1831
+ char **ptrs;
1832
+
1833
+ strides = NAD_STRIDES(axisdata);
1834
+ ptrs = NAD_PTRS(axisdata);
1835
+
1836
+ i = NAD_INDEX(axisdata);
1837
+
1838
+ for (istrides = 0; istrides < nstrides; ++istrides) {
1839
+ ptrs[istrides] = dataptr[istrides] + i*strides[istrides];
1840
+ }
1841
+
1842
+ dataptr = ptrs;
1843
+
1844
+ NIT_ADVANCE_AXISDATA(axisdata, -1);
1845
+ }
1846
+ }
1847
+ }
1848
+
1849
+ /*
1850
+ * This gets called after the the buffers have been exhausted, and
1851
+ * their data needs to be written back to the arrays. The multi-index
1852
+ * must be positioned for the beginning of the buffer.
1853
+ */
1854
+ NPY_NO_EXPORT void
1855
+ npyiter_copy_from_buffers(NpyIter *iter)
1856
+ {
1857
+ npy_uint32 itflags = NIT_ITFLAGS(iter);
1858
+ int ndim = NIT_NDIM(iter);
1859
+ int iop, nop = NIT_NOP(iter);
1860
+ int maskop = NIT_MASKOP(iter);
1861
+
1862
+ npyiter_opitflags *op_itflags = NIT_OPITFLAGS(iter);
1863
+ NpyIter_BufferData *bufferdata = NIT_BUFFERDATA(iter);
1864
+ NpyIter_AxisData *axisdata = NIT_AXISDATA(iter),
1865
+ *reduce_outeraxisdata = NULL;
1866
+
1867
+ PyArray_Descr **dtypes = NIT_DTYPES(iter);
1868
+ npy_intp transfersize = NBF_SIZE(bufferdata);
1869
+ npy_intp *strides = NBF_STRIDES(bufferdata),
1870
+ *ad_strides = NAD_STRIDES(axisdata);
1871
+ npy_intp sizeof_axisdata = NIT_AXISDATA_SIZEOF(itflags, ndim, nop);
1872
+ char **ad_ptrs = NAD_PTRS(axisdata);
1873
+ char **buffers = NBF_BUFFERS(bufferdata);
1874
+ char *buffer;
1875
+
1876
+ npy_intp reduce_outerdim = 0;
1877
+ npy_intp *reduce_outerstrides = NULL;
1878
+
1879
+ PyArray_StridedUnaryOp *stransfer = NULL;
1880
+ NpyAuxData *transferdata = NULL;
1881
+
1882
+ npy_intp axisdata_incr = NIT_AXISDATA_SIZEOF(itflags, ndim, nop) /
1883
+ NPY_SIZEOF_INTP;
1884
+
1885
+ /* If we're past the end, nothing to copy */
1886
+ if (NBF_SIZE(bufferdata) == 0) {
1887
+ return;
1888
+ }
1889
+
1890
+ NPY_IT_DBG_PRINT("Iterator: Copying buffers to outputs\n");
1891
+
1892
+ if (itflags&NPY_ITFLAG_REDUCE) {
1893
+ reduce_outerdim = NBF_REDUCE_OUTERDIM(bufferdata);
1894
+ reduce_outerstrides = NBF_REDUCE_OUTERSTRIDES(bufferdata);
1895
+ reduce_outeraxisdata = NIT_INDEX_AXISDATA(axisdata, reduce_outerdim);
1896
+ transfersize *= NBF_REDUCE_OUTERSIZE(bufferdata);
1897
+ }
1898
+
1899
+ for (iop = 0; iop < nop; ++iop) {
1900
+ stransfer = NBF_WRITETRANSFERFN(bufferdata)[iop];
1901
+ transferdata = NBF_WRITETRANSFERDATA(bufferdata)[iop];
1902
+ buffer = buffers[iop];
1903
+ /*
1904
+ * Copy the data back to the arrays. If the type has refs,
1905
+ * this function moves them so the buffer's refs are released.
1906
+ *
1907
+ * The flag USINGBUFFER is set when the buffer was used, so
1908
+ * only copy back when this flag is on.
1909
+ */
1910
+ if ((stransfer != NULL) &&
1911
+ (op_itflags[iop]&(NPY_OP_ITFLAG_WRITE|NPY_OP_ITFLAG_USINGBUFFER))
1912
+ == (NPY_OP_ITFLAG_WRITE|NPY_OP_ITFLAG_USINGBUFFER)) {
1913
+ npy_intp op_transfersize;
1914
+
1915
+ npy_intp src_stride, *dst_strides, *dst_coords, *dst_shape;
1916
+ int ndim_transfer;
1917
+
1918
+ NPY_IT_DBG_PRINT1("Iterator: Operand %d was buffered\n",
1919
+ (int)iop);
1920
+
1921
+ /*
1922
+ * If this operand is being reduced in the inner loop,
1923
+ * its buffering stride was set to zero, and just
1924
+ * one element was copied.
1925
+ */
1926
+ if (op_itflags[iop]&NPY_OP_ITFLAG_REDUCE) {
1927
+ if (strides[iop] == 0) {
1928
+ if (reduce_outerstrides[iop] == 0) {
1929
+ op_transfersize = 1;
1930
+ src_stride = 0;
1931
+ dst_strides = &src_stride;
1932
+ dst_coords = &NAD_INDEX(reduce_outeraxisdata);
1933
+ dst_shape = &NAD_SHAPE(reduce_outeraxisdata);
1934
+ ndim_transfer = 1;
1935
+ }
1936
+ else {
1937
+ op_transfersize = NBF_REDUCE_OUTERSIZE(bufferdata);
1938
+ src_stride = reduce_outerstrides[iop];
1939
+ dst_strides =
1940
+ &NAD_STRIDES(reduce_outeraxisdata)[iop];
1941
+ dst_coords = &NAD_INDEX(reduce_outeraxisdata);
1942
+ dst_shape = &NAD_SHAPE(reduce_outeraxisdata);
1943
+ ndim_transfer = ndim - reduce_outerdim;
1944
+ }
1945
+ }
1946
+ else {
1947
+ if (reduce_outerstrides[iop] == 0) {
1948
+ op_transfersize = NBF_SIZE(bufferdata);
1949
+ src_stride = strides[iop];
1950
+ dst_strides = &ad_strides[iop];
1951
+ dst_coords = &NAD_INDEX(axisdata);
1952
+ dst_shape = &NAD_SHAPE(axisdata);
1953
+ ndim_transfer = reduce_outerdim ?
1954
+ reduce_outerdim : 1;
1955
+ }
1956
+ else {
1957
+ op_transfersize = transfersize;
1958
+ src_stride = strides[iop];
1959
+ dst_strides = &ad_strides[iop];
1960
+ dst_coords = &NAD_INDEX(axisdata);
1961
+ dst_shape = &NAD_SHAPE(axisdata);
1962
+ ndim_transfer = ndim;
1963
+ }
1964
+ }
1965
+ }
1966
+ else {
1967
+ op_transfersize = transfersize;
1968
+ src_stride = strides[iop];
1969
+ dst_strides = &ad_strides[iop];
1970
+ dst_coords = &NAD_INDEX(axisdata);
1971
+ dst_shape = &NAD_SHAPE(axisdata);
1972
+ ndim_transfer = ndim;
1973
+ }
1974
+
1975
+ NPY_IT_DBG_PRINT2("Iterator: Copying buffer to "
1976
+ "operand %d (%d items)\n",
1977
+ (int)iop, (int)op_transfersize);
1978
+
1979
+ /* WRITEMASKED operand */
1980
+ if (op_itflags[iop] & NPY_OP_ITFLAG_WRITEMASKED) {
1981
+ npy_bool *maskptr;
1982
+
1983
+ /*
1984
+ * The mask pointer may be in the buffer or in
1985
+ * the array, detect which one.
1986
+ */
1987
+ if ((op_itflags[maskop]&NPY_OP_ITFLAG_USINGBUFFER) != 0) {
1988
+ maskptr = (npy_bool *)buffers[maskop];
1989
+ }
1990
+ else {
1991
+ maskptr = (npy_bool *)ad_ptrs[maskop];
1992
+ }
1993
+
1994
+ PyArray_TransferMaskedStridedToNDim(ndim_transfer,
1995
+ ad_ptrs[iop], dst_strides, axisdata_incr,
1996
+ buffer, src_stride,
1997
+ maskptr, strides[maskop],
1998
+ dst_coords, axisdata_incr,
1999
+ dst_shape, axisdata_incr,
2000
+ op_transfersize, dtypes[iop]->elsize,
2001
+ (PyArray_MaskedStridedUnaryOp *)stransfer,
2002
+ transferdata);
2003
+ }
2004
+ /* Regular operand */
2005
+ else {
2006
+ PyArray_TransferStridedToNDim(ndim_transfer,
2007
+ ad_ptrs[iop], dst_strides, axisdata_incr,
2008
+ buffer, src_stride,
2009
+ dst_coords, axisdata_incr,
2010
+ dst_shape, axisdata_incr,
2011
+ op_transfersize, dtypes[iop]->elsize,
2012
+ stransfer,
2013
+ transferdata);
2014
+ }
2015
+ }
2016
+ /* If there's no copy back, we may have to decrement refs. In
2017
+ * this case, the transfer function has a 'decsrcref' transfer
2018
+ * function, so we can use it to do the decrement.
2019
+ *
2020
+ * The flag USINGBUFFER is set when the buffer was used, so
2021
+ * only decrement refs when this flag is on.
2022
+ */
2023
+ else if (stransfer != NULL &&
2024
+ (op_itflags[iop]&NPY_OP_ITFLAG_USINGBUFFER) != 0) {
2025
+ NPY_IT_DBG_PRINT1("Iterator: Freeing refs and zeroing buffer "
2026
+ "of operand %d\n", (int)iop);
2027
+ /* Decrement refs */
2028
+ stransfer(NULL, 0, buffer, dtypes[iop]->elsize,
2029
+ transfersize, dtypes[iop]->elsize,
2030
+ transferdata);
2031
+ /*
2032
+ * Zero out the memory for safety. For instance,
2033
+ * if during iteration some Python code copied an
2034
+ * array pointing into the buffer, it will get None
2035
+ * values for its references after this.
2036
+ */
2037
+ memset(buffer, 0, dtypes[iop]->elsize*transfersize);
2038
+ }
2039
+ }
2040
+
2041
+ NPY_IT_DBG_PRINT("Iterator: Finished copying buffers to outputs\n");
2042
+ }
2043
+
2044
+ /*
2045
+ * This gets called after the iterator has been positioned to a multi-index
2046
+ * for the start of a buffer. It decides which operands need a buffer,
2047
+ * and copies the data into the buffers.
2048
+ */
2049
+ NPY_NO_EXPORT void
2050
+ npyiter_copy_to_buffers(NpyIter *iter, char **prev_dataptrs)
2051
+ {
2052
+ npy_uint32 itflags = NIT_ITFLAGS(iter);
2053
+ int ndim = NIT_NDIM(iter);
2054
+ int iop, nop = NIT_NOP(iter);
2055
+
2056
+ npyiter_opitflags *op_itflags = NIT_OPITFLAGS(iter);
2057
+ NpyIter_BufferData *bufferdata = NIT_BUFFERDATA(iter);
2058
+ NpyIter_AxisData *axisdata = NIT_AXISDATA(iter),
2059
+ *reduce_outeraxisdata = NULL;
2060
+
2061
+ PyArray_Descr **dtypes = NIT_DTYPES(iter);
2062
+ PyArrayObject **operands = NIT_OPERANDS(iter);
2063
+ npy_intp *strides = NBF_STRIDES(bufferdata),
2064
+ *ad_strides = NAD_STRIDES(axisdata);
2065
+ npy_intp sizeof_axisdata = NIT_AXISDATA_SIZEOF(itflags, ndim, nop);
2066
+ char **ptrs = NBF_PTRS(bufferdata), **ad_ptrs = NAD_PTRS(axisdata);
2067
+ char **buffers = NBF_BUFFERS(bufferdata);
2068
+ npy_intp iterindex, iterend, transfersize,
2069
+ singlestridesize, reduce_innersize = 0, reduce_outerdim = 0;
2070
+ int is_onestride = 0, any_buffered = 0;
2071
+
2072
+ npy_intp *reduce_outerstrides = NULL;
2073
+ char **reduce_outerptrs = NULL;
2074
+
2075
+ PyArray_StridedUnaryOp *stransfer = NULL;
2076
+ NpyAuxData *transferdata = NULL;
2077
+
2078
+ /*
2079
+ * Have to get this flag before npyiter_checkreducesize sets
2080
+ * it for the next iteration.
2081
+ */
2082
+ npy_bool reuse_reduce_loops = (prev_dataptrs != NULL) &&
2083
+ ((itflags&NPY_ITFLAG_REUSE_REDUCE_LOOPS) != 0);
2084
+
2085
+ npy_intp axisdata_incr = NIT_AXISDATA_SIZEOF(itflags, ndim, nop) /
2086
+ NPY_SIZEOF_INTP;
2087
+
2088
+ NPY_IT_DBG_PRINT("Iterator: Copying inputs to buffers\n");
2089
+
2090
+ /* Calculate the size if using any buffers */
2091
+ iterindex = NIT_ITERINDEX(iter);
2092
+ iterend = NIT_ITEREND(iter);
2093
+ transfersize = NBF_BUFFERSIZE(bufferdata);
2094
+ if (transfersize > iterend - iterindex) {
2095
+ transfersize = iterend - iterindex;
2096
+ }
2097
+
2098
+ /* If last time around, the reduce loop structure was full, we reuse it */
2099
+ if (reuse_reduce_loops) {
2100
+ npy_intp full_transfersize, prev_reduce_outersize;
2101
+
2102
+ prev_reduce_outersize = NBF_REDUCE_OUTERSIZE(bufferdata);
2103
+ reduce_outerstrides = NBF_REDUCE_OUTERSTRIDES(bufferdata);
2104
+ reduce_outerptrs = NBF_REDUCE_OUTERPTRS(bufferdata);
2105
+ reduce_outerdim = NBF_REDUCE_OUTERDIM(bufferdata);
2106
+ reduce_outeraxisdata = NIT_INDEX_AXISDATA(axisdata, reduce_outerdim);
2107
+ reduce_innersize = NBF_SIZE(bufferdata);
2108
+ NBF_REDUCE_POS(bufferdata) = 0;
2109
+ /*
2110
+ * Try to do make the outersize as big as possible. This allows
2111
+ * it to shrink when processing the last bit of the outer reduce loop,
2112
+ * then grow again at the beginnning of the next outer reduce loop.
2113
+ */
2114
+ NBF_REDUCE_OUTERSIZE(bufferdata) = (NAD_SHAPE(reduce_outeraxisdata)-
2115
+ NAD_INDEX(reduce_outeraxisdata));
2116
+ full_transfersize = NBF_REDUCE_OUTERSIZE(bufferdata)*reduce_innersize;
2117
+ /* If the full transfer size doesn't fit in the buffer, truncate it */
2118
+ if (full_transfersize > NBF_BUFFERSIZE(bufferdata)) {
2119
+ NBF_REDUCE_OUTERSIZE(bufferdata) = transfersize/reduce_innersize;
2120
+ transfersize = NBF_REDUCE_OUTERSIZE(bufferdata)*reduce_innersize;
2121
+ }
2122
+ else {
2123
+ transfersize = full_transfersize;
2124
+ }
2125
+ if (prev_reduce_outersize < NBF_REDUCE_OUTERSIZE(bufferdata)) {
2126
+ /*
2127
+ * If the previous time around less data was copied it may not
2128
+ * be safe to reuse the buffers even if the pointers match.
2129
+ */
2130
+ reuse_reduce_loops = 0;
2131
+ }
2132
+ NBF_BUFITEREND(bufferdata) = iterindex + reduce_innersize;
2133
+
2134
+ NPY_IT_DBG_PRINT3("Reused reduce transfersize: %d innersize: %d "
2135
+ "itersize: %d\n",
2136
+ (int)transfersize,
2137
+ (int)reduce_innersize,
2138
+ (int)NpyIter_GetIterSize(iter));
2139
+ NPY_IT_DBG_PRINT1("Reduced reduce outersize: %d",
2140
+ (int)NBF_REDUCE_OUTERSIZE(bufferdata));
2141
+ }
2142
+ /*
2143
+ * If there are any reduction operands, we may have to make
2144
+ * the size smaller so we don't copy the same value into
2145
+ * a buffer twice, as the buffering does not have a mechanism
2146
+ * to combine values itself.
2147
+ */
2148
+ else if (itflags&NPY_ITFLAG_REDUCE) {
2149
+ NPY_IT_DBG_PRINT("Iterator: Calculating reduce loops\n");
2150
+ transfersize = npyiter_checkreducesize(iter, transfersize,
2151
+ &reduce_innersize,
2152
+ &reduce_outerdim);
2153
+ NPY_IT_DBG_PRINT3("Reduce transfersize: %d innersize: %d "
2154
+ "itersize: %d\n",
2155
+ (int)transfersize,
2156
+ (int)reduce_innersize,
2157
+ (int)NpyIter_GetIterSize(iter));
2158
+
2159
+ reduce_outerstrides = NBF_REDUCE_OUTERSTRIDES(bufferdata);
2160
+ reduce_outerptrs = NBF_REDUCE_OUTERPTRS(bufferdata);
2161
+ reduce_outeraxisdata = NIT_INDEX_AXISDATA(axisdata, reduce_outerdim);
2162
+ NBF_SIZE(bufferdata) = reduce_innersize;
2163
+ NBF_REDUCE_POS(bufferdata) = 0;
2164
+ NBF_REDUCE_OUTERDIM(bufferdata) = reduce_outerdim;
2165
+ NBF_BUFITEREND(bufferdata) = iterindex + reduce_innersize;
2166
+ if (reduce_innersize == 0) {
2167
+ NBF_REDUCE_OUTERSIZE(bufferdata) = 0;
2168
+ return;
2169
+ }
2170
+ else {
2171
+ NBF_REDUCE_OUTERSIZE(bufferdata) = transfersize/reduce_innersize;
2172
+ }
2173
+ }
2174
+ else {
2175
+ NBF_SIZE(bufferdata) = transfersize;
2176
+ NBF_BUFITEREND(bufferdata) = iterindex + transfersize;
2177
+ }
2178
+
2179
+ /* Calculate the maximum size if using a single stride and no buffers */
2180
+ singlestridesize = NAD_SHAPE(axisdata)-NAD_INDEX(axisdata);
2181
+ if (singlestridesize > iterend - iterindex) {
2182
+ singlestridesize = iterend - iterindex;
2183
+ }
2184
+ if (singlestridesize >= transfersize) {
2185
+ is_onestride = 1;
2186
+ }
2187
+
2188
+ for (iop = 0; iop < nop; ++iop) {
2189
+ /*
2190
+ * If the buffer is write-only, these two are NULL, and the buffer
2191
+ * pointers will be set up but the read copy won't be done
2192
+ */
2193
+ stransfer = NBF_READTRANSFERFN(bufferdata)[iop];
2194
+ transferdata = NBF_READTRANSFERDATA(bufferdata)[iop];
2195
+ switch (op_itflags[iop]&
2196
+ (NPY_OP_ITFLAG_BUFNEVER|
2197
+ NPY_OP_ITFLAG_CAST|
2198
+ NPY_OP_ITFLAG_REDUCE)) {
2199
+ /* Never need to buffer this operand */
2200
+ case NPY_OP_ITFLAG_BUFNEVER:
2201
+ ptrs[iop] = ad_ptrs[iop];
2202
+ if (itflags&NPY_ITFLAG_REDUCE) {
2203
+ reduce_outerstrides[iop] = reduce_innersize *
2204
+ strides[iop];
2205
+ reduce_outerptrs[iop] = ptrs[iop];
2206
+ }
2207
+ /*
2208
+ * Should not adjust the stride - ad_strides[iop]
2209
+ * could be zero, but strides[iop] was initialized
2210
+ * to the first non-trivial stride.
2211
+ */
2212
+ stransfer = NULL;
2213
+ /* The flag NPY_OP_ITFLAG_USINGBUFFER can be ignored here */
2214
+ break;
2215
+ /* Never need to buffer this operand */
2216
+ case NPY_OP_ITFLAG_BUFNEVER|NPY_OP_ITFLAG_REDUCE:
2217
+ ptrs[iop] = ad_ptrs[iop];
2218
+ reduce_outerptrs[iop] = ptrs[iop];
2219
+ reduce_outerstrides[iop] = 0;
2220
+ /*
2221
+ * Should not adjust the stride - ad_strides[iop]
2222
+ * could be zero, but strides[iop] was initialized
2223
+ * to the first non-trivial stride.
2224
+ */
2225
+ stransfer = NULL;
2226
+ /* The flag NPY_OP_ITFLAG_USINGBUFFER can be ignored here */
2227
+ break;
2228
+ /* Just a copy */
2229
+ case 0:
2230
+ /* Do not reuse buffer if it did not exist */
2231
+ if (!(op_itflags[iop] & NPY_OP_ITFLAG_USINGBUFFER) &&
2232
+ (prev_dataptrs != NULL)) {
2233
+ prev_dataptrs[iop] = NULL;
2234
+ }
2235
+ /*
2236
+ * No copyswap or cast was requested, so all we're
2237
+ * doing is copying the data to fill the buffer and
2238
+ * produce a single stride. If the underlying data
2239
+ * already does that, no need to copy it.
2240
+ */
2241
+ if (is_onestride) {
2242
+ ptrs[iop] = ad_ptrs[iop];
2243
+ strides[iop] = ad_strides[iop];
2244
+ stransfer = NULL;
2245
+ /* Signal that the buffer is not being used */
2246
+ op_itflags[iop] &= (~NPY_OP_ITFLAG_USINGBUFFER);
2247
+ }
2248
+ /* If some other op is reduced, we have a double reduce loop */
2249
+ else if ((itflags&NPY_ITFLAG_REDUCE) &&
2250
+ (reduce_outerdim == 1) &&
2251
+ (transfersize/reduce_innersize <=
2252
+ NAD_SHAPE(reduce_outeraxisdata) -
2253
+ NAD_INDEX(reduce_outeraxisdata))) {
2254
+ ptrs[iop] = ad_ptrs[iop];
2255
+ reduce_outerptrs[iop] = ptrs[iop];
2256
+ strides[iop] = ad_strides[iop];
2257
+ reduce_outerstrides[iop] =
2258
+ NAD_STRIDES(reduce_outeraxisdata)[iop];
2259
+ stransfer = NULL;
2260
+ /* Signal that the buffer is not being used */
2261
+ op_itflags[iop] &= (~NPY_OP_ITFLAG_USINGBUFFER);
2262
+ }
2263
+ else {
2264
+ /* In this case, the buffer is being used */
2265
+ ptrs[iop] = buffers[iop];
2266
+ strides[iop] = dtypes[iop]->elsize;
2267
+ if (itflags&NPY_ITFLAG_REDUCE) {
2268
+ reduce_outerstrides[iop] = reduce_innersize *
2269
+ strides[iop];
2270
+ reduce_outerptrs[iop] = ptrs[iop];
2271
+ }
2272
+ /* Signal that the buffer is being used */
2273
+ op_itflags[iop] |= NPY_OP_ITFLAG_USINGBUFFER;
2274
+ }
2275
+ break;
2276
+ /* Just a copy, but with a reduction */
2277
+ case NPY_OP_ITFLAG_REDUCE:
2278
+ /* Do not reuse buffer if it did not exist */
2279
+ if (!(op_itflags[iop] & NPY_OP_ITFLAG_USINGBUFFER) &&
2280
+ (prev_dataptrs != NULL)) {
2281
+ prev_dataptrs[iop] = NULL;
2282
+ }
2283
+ if (ad_strides[iop] == 0) {
2284
+ strides[iop] = 0;
2285
+ /* It's all in one stride in the inner loop dimension */
2286
+ if (is_onestride) {
2287
+ NPY_IT_DBG_PRINT1("reduce op %d all one stride\n", (int)iop);
2288
+ ptrs[iop] = ad_ptrs[iop];
2289
+ reduce_outerstrides[iop] = 0;
2290
+ stransfer = NULL;
2291
+ /* Signal that the buffer is not being used */
2292
+ op_itflags[iop] &= (~NPY_OP_ITFLAG_USINGBUFFER);
2293
+ }
2294
+ /* It's all in one stride in the reduce outer loop */
2295
+ else if ((reduce_outerdim > 0) &&
2296
+ (transfersize/reduce_innersize <=
2297
+ NAD_SHAPE(reduce_outeraxisdata) -
2298
+ NAD_INDEX(reduce_outeraxisdata))) {
2299
+ NPY_IT_DBG_PRINT1("reduce op %d all one outer stride\n",
2300
+ (int)iop);
2301
+ ptrs[iop] = ad_ptrs[iop];
2302
+ /* Outer reduce loop advances by one item */
2303
+ reduce_outerstrides[iop] =
2304
+ NAD_STRIDES(reduce_outeraxisdata)[iop];
2305
+ stransfer = NULL;
2306
+ /* Signal that the buffer is not being used */
2307
+ op_itflags[iop] &= (~NPY_OP_ITFLAG_USINGBUFFER);
2308
+ }
2309
+ /* In this case, the buffer is being used */
2310
+ else {
2311
+ NPY_IT_DBG_PRINT1("reduce op %d must buffer\n", (int)iop);
2312
+ ptrs[iop] = buffers[iop];
2313
+ /* Both outer and inner reduce loops have stride 0 */
2314
+ if (NAD_STRIDES(reduce_outeraxisdata)[iop] == 0) {
2315
+ reduce_outerstrides[iop] = 0;
2316
+ }
2317
+ /* Outer reduce loop advances by one item */
2318
+ else {
2319
+ reduce_outerstrides[iop] = dtypes[iop]->elsize;
2320
+ }
2321
+ /* Signal that the buffer is being used */
2322
+ op_itflags[iop] |= NPY_OP_ITFLAG_USINGBUFFER;
2323
+ }
2324
+
2325
+ }
2326
+ else if (is_onestride) {
2327
+ NPY_IT_DBG_PRINT1("reduce op %d all one stride in dim 0\n", (int)iop);
2328
+ ptrs[iop] = ad_ptrs[iop];
2329
+ strides[iop] = ad_strides[iop];
2330
+ reduce_outerstrides[iop] = 0;
2331
+ stransfer = NULL;
2332
+ /* Signal that the buffer is not being used */
2333
+ op_itflags[iop] &= (~NPY_OP_ITFLAG_USINGBUFFER);
2334
+ }
2335
+ else {
2336
+ /* It's all in one stride in the reduce outer loop */
2337
+ if ((reduce_outerdim > 0) &&
2338
+ (transfersize/reduce_innersize <=
2339
+ NAD_SHAPE(reduce_outeraxisdata) -
2340
+ NAD_INDEX(reduce_outeraxisdata))) {
2341
+ ptrs[iop] = ad_ptrs[iop];
2342
+ strides[iop] = ad_strides[iop];
2343
+ /* Outer reduce loop advances by one item */
2344
+ reduce_outerstrides[iop] =
2345
+ NAD_STRIDES(reduce_outeraxisdata)[iop];
2346
+ stransfer = NULL;
2347
+ /* Signal that the buffer is not being used */
2348
+ op_itflags[iop] &= (~NPY_OP_ITFLAG_USINGBUFFER);
2349
+ }
2350
+ /* In this case, the buffer is being used */
2351
+ else {
2352
+ ptrs[iop] = buffers[iop];
2353
+ strides[iop] = dtypes[iop]->elsize;
2354
+
2355
+ if (NAD_STRIDES(reduce_outeraxisdata)[iop] == 0) {
2356
+ /* Reduction in outer reduce loop */
2357
+ reduce_outerstrides[iop] = 0;
2358
+ }
2359
+ else {
2360
+ /* Advance to next items in outer reduce loop */
2361
+ reduce_outerstrides[iop] = reduce_innersize *
2362
+ dtypes[iop]->elsize;
2363
+ }
2364
+ /* Signal that the buffer is being used */
2365
+ op_itflags[iop] |= NPY_OP_ITFLAG_USINGBUFFER;
2366
+ }
2367
+ }
2368
+ reduce_outerptrs[iop] = ptrs[iop];
2369
+ break;
2370
+ default:
2371
+ /* In this case, the buffer is always being used */
2372
+ any_buffered = 1;
2373
+
2374
+ /* Signal that the buffer is being used */
2375
+ op_itflags[iop] |= NPY_OP_ITFLAG_USINGBUFFER;
2376
+
2377
+ if (!(op_itflags[iop]&NPY_OP_ITFLAG_REDUCE)) {
2378
+ ptrs[iop] = buffers[iop];
2379
+ strides[iop] = dtypes[iop]->elsize;
2380
+ if (itflags&NPY_ITFLAG_REDUCE) {
2381
+ reduce_outerstrides[iop] = reduce_innersize *
2382
+ strides[iop];
2383
+ reduce_outerptrs[iop] = ptrs[iop];
2384
+ }
2385
+ }
2386
+ /* The buffer is being used with reduction */
2387
+ else {
2388
+ ptrs[iop] = buffers[iop];
2389
+ if (ad_strides[iop] == 0) {
2390
+ NPY_IT_DBG_PRINT1("cast op %d has innermost stride 0\n", (int)iop);
2391
+ strides[iop] = 0;
2392
+ /* Both outer and inner reduce loops have stride 0 */
2393
+ if (NAD_STRIDES(reduce_outeraxisdata)[iop] == 0) {
2394
+ NPY_IT_DBG_PRINT1("cast op %d has outermost stride 0\n", (int)iop);
2395
+ reduce_outerstrides[iop] = 0;
2396
+ }
2397
+ /* Outer reduce loop advances by one item */
2398
+ else {
2399
+ NPY_IT_DBG_PRINT1("cast op %d has outermost stride !=0\n", (int)iop);
2400
+ reduce_outerstrides[iop] = dtypes[iop]->elsize;
2401
+ }
2402
+ }
2403
+ else {
2404
+ NPY_IT_DBG_PRINT1("cast op %d has innermost stride !=0\n", (int)iop);
2405
+ strides[iop] = dtypes[iop]->elsize;
2406
+
2407
+ if (NAD_STRIDES(reduce_outeraxisdata)[iop] == 0) {
2408
+ NPY_IT_DBG_PRINT1("cast op %d has outermost stride 0\n", (int)iop);
2409
+ /* Reduction in outer reduce loop */
2410
+ reduce_outerstrides[iop] = 0;
2411
+ }
2412
+ else {
2413
+ NPY_IT_DBG_PRINT1("cast op %d has outermost stride !=0\n", (int)iop);
2414
+ /* Advance to next items in outer reduce loop */
2415
+ reduce_outerstrides[iop] = reduce_innersize *
2416
+ dtypes[iop]->elsize;
2417
+ }
2418
+ }
2419
+ reduce_outerptrs[iop] = ptrs[iop];
2420
+ }
2421
+ break;
2422
+ }
2423
+
2424
+ if (stransfer != NULL) {
2425
+ npy_intp src_itemsize;
2426
+ npy_intp op_transfersize;
2427
+
2428
+ npy_intp dst_stride, *src_strides, *src_coords, *src_shape;
2429
+ int ndim_transfer;
2430
+
2431
+ npy_bool skip_transfer = 0;
2432
+
2433
+ src_itemsize = PyArray_DTYPE(operands[iop])->elsize;
2434
+
2435
+ /* If stransfer wasn't set to NULL, buffering is required */
2436
+ any_buffered = 1;
2437
+
2438
+ /*
2439
+ * If this operand is being reduced in the inner loop,
2440
+ * set its buffering stride to zero, and just copy
2441
+ * one element.
2442
+ */
2443
+ if (op_itflags[iop]&NPY_OP_ITFLAG_REDUCE) {
2444
+ if (ad_strides[iop] == 0) {
2445
+ strides[iop] = 0;
2446
+ if (reduce_outerstrides[iop] == 0) {
2447
+ op_transfersize = 1;
2448
+ dst_stride = 0;
2449
+ src_strides = &dst_stride;
2450
+ src_coords = &NAD_INDEX(reduce_outeraxisdata);
2451
+ src_shape = &NAD_SHAPE(reduce_outeraxisdata);
2452
+ ndim_transfer = 1;
2453
+
2454
+ /*
2455
+ * When we're reducing a single element, and
2456
+ * it's still the same element, don't overwrite
2457
+ * it even when reuse reduce loops is unset.
2458
+ * This preserves the precision of the
2459
+ * intermediate calculation.
2460
+ */
2461
+ if (prev_dataptrs &&
2462
+ prev_dataptrs[iop] == ad_ptrs[iop]) {
2463
+ NPY_IT_DBG_PRINT1("Iterator: skipping operand %d"
2464
+ " copy because it's a 1-element reduce\n",
2465
+ (int)iop);
2466
+
2467
+ skip_transfer = 1;
2468
+ }
2469
+ }
2470
+ else {
2471
+ op_transfersize = NBF_REDUCE_OUTERSIZE(bufferdata);
2472
+ dst_stride = reduce_outerstrides[iop];
2473
+ src_strides = &NAD_STRIDES(reduce_outeraxisdata)[iop];
2474
+ src_coords = &NAD_INDEX(reduce_outeraxisdata);
2475
+ src_shape = &NAD_SHAPE(reduce_outeraxisdata);
2476
+ ndim_transfer = ndim - reduce_outerdim;
2477
+ }
2478
+ }
2479
+ else {
2480
+ if (reduce_outerstrides[iop] == 0) {
2481
+ op_transfersize = NBF_SIZE(bufferdata);
2482
+ dst_stride = strides[iop];
2483
+ src_strides = &ad_strides[iop];
2484
+ src_coords = &NAD_INDEX(axisdata);
2485
+ src_shape = &NAD_SHAPE(axisdata);
2486
+ ndim_transfer = reduce_outerdim ? reduce_outerdim : 1;
2487
+ }
2488
+ else {
2489
+ op_transfersize = transfersize;
2490
+ dst_stride = strides[iop];
2491
+ src_strides = &ad_strides[iop];
2492
+ src_coords = &NAD_INDEX(axisdata);
2493
+ src_shape = &NAD_SHAPE(axisdata);
2494
+ ndim_transfer = ndim;
2495
+ }
2496
+ }
2497
+ }
2498
+ else {
2499
+ op_transfersize = transfersize;
2500
+ dst_stride = strides[iop];
2501
+ src_strides = &ad_strides[iop];
2502
+ src_coords = &NAD_INDEX(axisdata);
2503
+ src_shape = &NAD_SHAPE(axisdata);
2504
+ ndim_transfer = ndim;
2505
+ }
2506
+
2507
+ /*
2508
+ * If the whole buffered loop structure remains the same,
2509
+ * and the source pointer for this data didn't change,
2510
+ * we don't have to copy the data again.
2511
+ */
2512
+ if (reuse_reduce_loops && prev_dataptrs[iop] == ad_ptrs[iop]) {
2513
+ NPY_IT_DBG_PRINT2("Iterator: skipping operands %d "
2514
+ "copy (%d items) because loops are reused and the data "
2515
+ "pointer didn't change\n",
2516
+ (int)iop, (int)op_transfersize);
2517
+ skip_transfer = 1;
2518
+ }
2519
+
2520
+ /* If the data type requires zero-inititialization */
2521
+ if (PyDataType_FLAGCHK(dtypes[iop], NPY_NEEDS_INIT)) {
2522
+ NPY_IT_DBG_PRINT("Iterator: Buffer requires init, "
2523
+ "memsetting to 0\n");
2524
+ memset(ptrs[iop], 0, dtypes[iop]->elsize*op_transfersize);
2525
+ /* Can't skip the transfer in this case */
2526
+ skip_transfer = 0;
2527
+ }
2528
+
2529
+ if (!skip_transfer) {
2530
+ NPY_IT_DBG_PRINT2("Iterator: Copying operand %d to "
2531
+ "buffer (%d items)\n",
2532
+ (int)iop, (int)op_transfersize);
2533
+
2534
+ PyArray_TransferNDimToStrided(ndim_transfer,
2535
+ ptrs[iop], dst_stride,
2536
+ ad_ptrs[iop], src_strides, axisdata_incr,
2537
+ src_coords, axisdata_incr,
2538
+ src_shape, axisdata_incr,
2539
+ op_transfersize, src_itemsize,
2540
+ stransfer,
2541
+ transferdata);
2542
+ }
2543
+ }
2544
+ else if (ptrs[iop] == buffers[iop]) {
2545
+ /* If the data type requires zero-inititialization */
2546
+ if (PyDataType_FLAGCHK(dtypes[iop], NPY_NEEDS_INIT)) {
2547
+ NPY_IT_DBG_PRINT1("Iterator: Write-only buffer for "
2548
+ "operand %d requires init, "
2549
+ "memsetting to 0\n", (int)iop);
2550
+ memset(ptrs[iop], 0, dtypes[iop]->elsize*transfersize);
2551
+ }
2552
+ }
2553
+
2554
+ }
2555
+
2556
+ /*
2557
+ * If buffering wasn't needed, we can grow the inner
2558
+ * loop to as large as possible.
2559
+ *
2560
+ * TODO: Could grow REDUCE loop too with some more logic above.
2561
+ */
2562
+ if (!any_buffered && (itflags&NPY_ITFLAG_GROWINNER) &&
2563
+ !(itflags&NPY_ITFLAG_REDUCE)) {
2564
+ if (singlestridesize > transfersize) {
2565
+ NPY_IT_DBG_PRINT2("Iterator: Expanding inner loop size "
2566
+ "from %d to %d since buffering wasn't needed\n",
2567
+ (int)NBF_SIZE(bufferdata), (int)singlestridesize);
2568
+ NBF_SIZE(bufferdata) = singlestridesize;
2569
+ NBF_BUFITEREND(bufferdata) = iterindex + singlestridesize;
2570
+ }
2571
+ }
2572
+
2573
+ NPY_IT_DBG_PRINT1("Any buffering needed: %d\n", any_buffered);
2574
+
2575
+ NPY_IT_DBG_PRINT1("Iterator: Finished copying inputs to buffers "
2576
+ "(buffered size is %d)\n", (int)NBF_SIZE(bufferdata));
2577
+ }
2578
+
2579
+ /*
2580
+ * This checks how much space can be buffered without encountering the
2581
+ * same value twice, or for operands whose innermost stride is zero,
2582
+ * without encountering a different value. By reducing the buffered
2583
+ * amount to this size, reductions can be safely buffered.
2584
+ *
2585
+ * Reductions are buffered with two levels of looping, to avoid
2586
+ * frequent copying to the buffers. The return value is the over-all
2587
+ * buffer size, and when the flag NPY_ITFLAG_REDUCE is set, reduce_innersize
2588
+ * receives the size of the inner of the two levels of looping.
2589
+ *
2590
+ * The value placed in reduce_outerdim is the index into the AXISDATA
2591
+ * for where the second level of the double loop begins.
2592
+ *
2593
+ * The return value is always a multiple of the value placed in
2594
+ * reduce_innersize.
2595
+ */
2596
+ static npy_intp
2597
+ npyiter_checkreducesize(NpyIter *iter, npy_intp count,
2598
+ npy_intp *reduce_innersize,
2599
+ npy_intp *reduce_outerdim)
2600
+ {
2601
+ npy_uint32 itflags = NIT_ITFLAGS(iter);
2602
+ int idim, ndim = NIT_NDIM(iter);
2603
+ int iop, nop = NIT_NOP(iter);
2604
+
2605
+ NpyIter_AxisData *axisdata;
2606
+ npy_intp sizeof_axisdata;
2607
+ npy_intp coord, shape, *strides;
2608
+ npy_intp reducespace = 1, factor;
2609
+ npy_bool nonzerocoord;
2610
+
2611
+ npyiter_opitflags *op_itflags = NIT_OPITFLAGS(iter);
2612
+ char stride0op[NPY_MAXARGS];
2613
+
2614
+ /* Default to no outer axis */
2615
+ *reduce_outerdim = 0;
2616
+
2617
+ /* If there's only one dimension, no need to calculate anything */
2618
+ if (ndim == 1 || count == 0) {
2619
+ *reduce_innersize = count;
2620
+ return count;
2621
+ }
2622
+
2623
+ sizeof_axisdata = NIT_AXISDATA_SIZEOF(itflags, ndim, nop);
2624
+ axisdata = NIT_AXISDATA(iter);
2625
+
2626
+ /* Indicate which REDUCE operands have stride 0 in the inner loop */
2627
+ strides = NAD_STRIDES(axisdata);
2628
+ for (iop = 0; iop < nop; ++iop) {
2629
+ stride0op[iop] = (op_itflags[iop]&NPY_OP_ITFLAG_REDUCE) &&
2630
+ (strides[iop] == 0);
2631
+ NPY_IT_DBG_PRINT2("Iterator: Operand %d has stride 0 in "
2632
+ "the inner loop? %d\n", iop, (int)stride0op[iop]);
2633
+ }
2634
+ shape = NAD_SHAPE(axisdata);
2635
+ coord = NAD_INDEX(axisdata);
2636
+ reducespace += (shape-coord-1);
2637
+ factor = shape;
2638
+ NIT_ADVANCE_AXISDATA(axisdata, 1);
2639
+
2640
+ /* Initialize nonzerocoord based on the first coordinate */
2641
+ nonzerocoord = (coord != 0);
2642
+
2643
+ /* Go forward through axisdata, calculating the space available */
2644
+ for (idim = 1; idim < ndim && reducespace < count;
2645
+ ++idim, NIT_ADVANCE_AXISDATA(axisdata, 1)) {
2646
+ NPY_IT_DBG_PRINT2("Iterator: inner loop reducespace %d, count %d\n",
2647
+ (int)reducespace, (int)count);
2648
+
2649
+ strides = NAD_STRIDES(axisdata);
2650
+ for (iop = 0; iop < nop; ++iop) {
2651
+ /*
2652
+ * If a reduce stride switched from zero to non-zero, or
2653
+ * vice versa, that's the point where the data will stop
2654
+ * being the same element or will repeat, and if the
2655
+ * buffer starts with an all zero multi-index up to this
2656
+ * point, gives us the reduce_innersize.
2657
+ */
2658
+ if((stride0op[iop] && (strides[iop] != 0)) ||
2659
+ (!stride0op[iop] &&
2660
+ (strides[iop] == 0) &&
2661
+ (op_itflags[iop]&NPY_OP_ITFLAG_REDUCE))) {
2662
+ NPY_IT_DBG_PRINT1("Iterator: Reduce operation limits "
2663
+ "buffer to %d\n", (int)reducespace);
2664
+ /*
2665
+ * If we already found more elements than count, or
2666
+ * the starting coordinate wasn't zero, the two-level
2667
+ * looping is unnecessary/can't be done, so return.
2668
+ */
2669
+ if (count <= reducespace) {
2670
+ *reduce_innersize = count;
2671
+ NIT_ITFLAGS(iter) |= NPY_ITFLAG_REUSE_REDUCE_LOOPS;
2672
+ return count;
2673
+ }
2674
+ else if (nonzerocoord) {
2675
+ if (reducespace < count) {
2676
+ count = reducespace;
2677
+ }
2678
+ *reduce_innersize = count;
2679
+ /* NOTE: This is similar to the (coord != 0) case below. */
2680
+ NIT_ITFLAGS(iter) &= ~NPY_ITFLAG_REUSE_REDUCE_LOOPS;
2681
+ return count;
2682
+ }
2683
+ else {
2684
+ *reduce_innersize = reducespace;
2685
+ break;
2686
+ }
2687
+ }
2688
+ }
2689
+ /* If we broke out of the loop early, we found reduce_innersize */
2690
+ if (iop != nop) {
2691
+ NPY_IT_DBG_PRINT2("Iterator: Found first dim not "
2692
+ "reduce (%d of %d)\n", iop, nop);
2693
+ break;
2694
+ }
2695
+
2696
+ shape = NAD_SHAPE(axisdata);
2697
+ coord = NAD_INDEX(axisdata);
2698
+ if (coord != 0) {
2699
+ nonzerocoord = 1;
2700
+ }
2701
+ reducespace += (shape-coord-1) * factor;
2702
+ factor *= shape;
2703
+ }
2704
+
2705
+ /*
2706
+ * If there was any non-zero coordinate, the reduction inner
2707
+ * loop doesn't fit in the buffersize, or the reduction inner loop
2708
+ * covered the entire iteration size, can't do the double loop.
2709
+ */
2710
+ if (nonzerocoord || count < reducespace || idim == ndim) {
2711
+ if (reducespace < count) {
2712
+ count = reducespace;
2713
+ }
2714
+ *reduce_innersize = count;
2715
+ /* In this case, we can't reuse the reduce loops */
2716
+ NIT_ITFLAGS(iter) &= ~NPY_ITFLAG_REUSE_REDUCE_LOOPS;
2717
+ return count;
2718
+ }
2719
+
2720
+ coord = NAD_INDEX(axisdata);
2721
+ if (coord != 0) {
2722
+ /*
2723
+ * In this case, it is only safe to reuse the buffer if the amount
2724
+ * of data copied is not more then the current axes, as is the
2725
+ * case when reuse_reduce_loops was active already.
2726
+ * It should be in principle OK when the idim loop returns immidiatly.
2727
+ */
2728
+ NIT_ITFLAGS(iter) &= ~NPY_ITFLAG_REUSE_REDUCE_LOOPS;
2729
+ }
2730
+ else {
2731
+ /* In this case, we can reuse the reduce loops */
2732
+ NIT_ITFLAGS(iter) |= NPY_ITFLAG_REUSE_REDUCE_LOOPS;
2733
+ }
2734
+
2735
+ *reduce_innersize = reducespace;
2736
+ count /= reducespace;
2737
+
2738
+ NPY_IT_DBG_PRINT2("Iterator: reduce_innersize %d count /ed %d\n",
2739
+ (int)reducespace, (int)count);
2740
+
2741
+ /*
2742
+ * Continue through the rest of the dimensions. If there are
2743
+ * two separated reduction axes, we may have to cut the buffer
2744
+ * short again.
2745
+ */
2746
+ *reduce_outerdim = idim;
2747
+ reducespace = 1;
2748
+ factor = 1;
2749
+ /* Indicate which REDUCE operands have stride 0 at the current level */
2750
+ strides = NAD_STRIDES(axisdata);
2751
+ for (iop = 0; iop < nop; ++iop) {
2752
+ stride0op[iop] = (op_itflags[iop]&NPY_OP_ITFLAG_REDUCE) &&
2753
+ (strides[iop] == 0);
2754
+ NPY_IT_DBG_PRINT2("Iterator: Operand %d has stride 0 in "
2755
+ "the outer loop? %d\n", iop, (int)stride0op[iop]);
2756
+ }
2757
+ shape = NAD_SHAPE(axisdata);
2758
+ reducespace += (shape-coord-1) * factor;
2759
+ factor *= shape;
2760
+ NIT_ADVANCE_AXISDATA(axisdata, 1);
2761
+ ++idim;
2762
+
2763
+ for (; idim < ndim && reducespace < count;
2764
+ ++idim, NIT_ADVANCE_AXISDATA(axisdata, 1)) {
2765
+ NPY_IT_DBG_PRINT2("Iterator: outer loop reducespace %d, count %d\n",
2766
+ (int)reducespace, (int)count);
2767
+ strides = NAD_STRIDES(axisdata);
2768
+ for (iop = 0; iop < nop; ++iop) {
2769
+ /*
2770
+ * If a reduce stride switched from zero to non-zero, or
2771
+ * vice versa, that's the point where the data will stop
2772
+ * being the same element or will repeat, and if the
2773
+ * buffer starts with an all zero multi-index up to this
2774
+ * point, gives us the reduce_innersize.
2775
+ */
2776
+ if((stride0op[iop] && (strides[iop] != 0)) ||
2777
+ (!stride0op[iop] &&
2778
+ (strides[iop] == 0) &&
2779
+ (op_itflags[iop]&NPY_OP_ITFLAG_REDUCE))) {
2780
+ NPY_IT_DBG_PRINT1("Iterator: Reduce operation limits "
2781
+ "buffer to %d\n", (int)reducespace);
2782
+ /*
2783
+ * This terminates the outer level of our double loop.
2784
+ */
2785
+ if (count <= reducespace) {
2786
+ return count * (*reduce_innersize);
2787
+ }
2788
+ else {
2789
+ return reducespace * (*reduce_innersize);
2790
+ }
2791
+ }
2792
+ }
2793
+
2794
+ shape = NAD_SHAPE(axisdata);
2795
+ coord = NAD_INDEX(axisdata);
2796
+ if (coord != 0) {
2797
+ nonzerocoord = 1;
2798
+ }
2799
+ reducespace += (shape-coord-1) * factor;
2800
+ factor *= shape;
2801
+ }
2802
+
2803
+ if (reducespace < count) {
2804
+ count = reducespace;
2805
+ }
2806
+ return count * (*reduce_innersize);
2807
+ }
2808
+
2809
+ #undef NPY_ITERATOR_IMPLEMENTATION_CODE