numpy 1.9.2__zip → 1.10.0__zip

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