numpy 1.9.3__zip → 1.10.0__zip

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1590) hide show
  1. numpy-1.10.0.post2/INSTALL.txt +200 -0
  2. numpy-1.10.0.post2/LICENSE.txt +30 -0
  3. numpy-1.10.0.post2/MANIFEST.in +31 -0
  4. numpy-1.10.0.post2/PKG-INFO +47 -0
  5. numpy-1.10.0.post2/cnew.txt +117 -0
  6. numpy-1.10.0.post2/cold.txt +44 -0
  7. numpy-1.10.0.post2/committers.txt +160 -0
  8. numpy-1.10.0.post2/cpre.txt +283 -0
  9. numpy-1.10.0.post2/crel.txt +161 -0
  10. numpy-1.10.0.post2/doc/release/1.10.0-notes.rst +439 -0
  11. numpy-1.10.0.post2/doc/source/conf.py +331 -0
  12. numpy-1.10.0.post2/doc/source/dev/development_environment.rst +211 -0
  13. numpy-1.10.0.post2/doc/source/dev/gitwash/development_workflow.rst +534 -0
  14. numpy-1.10.0.post2/doc/source/dev/gitwash/git_links.inc +95 -0
  15. numpy-1.10.0.post2/doc/source/dev/gitwash/index.rst +14 -0
  16. numpy-1.10.0.post2/doc/source/dev/index.rst +11 -0
  17. numpy-1.10.0.post2/doc/source/reference/arrays.classes.rst +490 -0
  18. numpy-1.10.0.post2/doc/source/reference/arrays.dtypes.rst +536 -0
  19. numpy-1.10.0.post2/doc/source/reference/arrays.indexing.rst +549 -0
  20. numpy-1.10.0.post2/doc/source/reference/arrays.interface.rst +337 -0
  21. numpy-1.10.0.post2/doc/source/reference/arrays.ndarray.rst +622 -0
  22. numpy-1.10.0.post2/doc/source/reference/arrays.scalars.rst +291 -0
  23. numpy-1.10.0.post2/doc/source/reference/c-api.array.rst +3393 -0
  24. numpy-1.10.0.post2/doc/source/reference/c-api.config.rst +103 -0
  25. numpy-1.10.0.post2/doc/source/reference/c-api.coremath.rst +420 -0
  26. numpy-1.10.0.post2/doc/source/reference/c-api.dtype.rst +376 -0
  27. numpy-1.10.0.post2/doc/source/reference/c-api.generalized-ufuncs.rst +191 -0
  28. numpy-1.10.0.post2/doc/source/reference/c-api.iterator.rst +1300 -0
  29. numpy-1.10.0.post2/doc/source/reference/c-api.types-and-structures.rst +1240 -0
  30. numpy-1.10.0.post2/doc/source/reference/c-api.ufunc.rst +413 -0
  31. numpy-1.10.0.post2/doc/source/reference/index.rst +43 -0
  32. numpy-1.10.0.post2/doc/source/reference/internals.code-explanations.rst +615 -0
  33. numpy-1.10.0.post2/doc/source/reference/routines.array-manipulation.rst +115 -0
  34. numpy-1.10.0.post2/doc/source/reference/routines.io.rst +78 -0
  35. numpy-1.10.0.post2/doc/source/reference/routines.linalg.rst +91 -0
  36. numpy-1.10.0.post2/doc/source/reference/routines.ma.rst +407 -0
  37. numpy-1.10.0.post2/doc/source/reference/routines.sort.rst +41 -0
  38. numpy-1.10.0.post2/doc/source/reference/routines.statistics.rst +57 -0
  39. numpy-1.10.0.post2/doc/source/reference/swig.interface-file.rst +1066 -0
  40. numpy-1.10.0.post2/doc/source/reference/swig.testing.rst +167 -0
  41. numpy-1.10.0.post2/doc/source/reference/ufuncs.rst +666 -0
  42. numpy-1.10.0.post2/doc/source/release.rst +20 -0
  43. numpy-1.10.0.post2/doc/source/user/basics.io.genfromtxt.rst +531 -0
  44. numpy-1.10.0.post2/doc/source/user/basics.rec.rst +7 -0
  45. numpy-1.10.0.post2/doc/source/user/c-info.beyond-basics.rst +560 -0
  46. numpy-1.10.0.post2/doc/source/user/c-info.how-to-extend.rst +642 -0
  47. numpy-1.10.0.post2/doc/source/user/c-info.python-as-glue.rst +1177 -0
  48. numpy-1.10.0.post2/doc/source/user/c-info.ufunc-tutorial.rst +1211 -0
  49. numpy-1.10.0.post2/doc/source/user/install.rst +194 -0
  50. numpy-1.10.0.post2/numpy/__init__.py +227 -0
  51. numpy-1.10.0.post2/numpy/_build_utils/README +8 -0
  52. numpy-1.10.0.post2/numpy/_build_utils/apple_accelerate.py +21 -0
  53. numpy-1.10.0.post2/numpy/_build_utils/common.py +138 -0
  54. numpy-1.10.0.post2/numpy/_build_utils/src/apple_sgemv_fix.c +227 -0
  55. numpy-1.10.0.post2/numpy/_build_utils/waf.py +531 -0
  56. numpy-1.10.0.post2/numpy/_import_tools.py +353 -0
  57. numpy-1.10.0.post2/numpy/add_newdocs.py +7611 -0
  58. numpy-1.10.0.post2/numpy/compat/_inspect.py +194 -0
  59. numpy-1.10.0.post2/numpy/compat/py3k.py +88 -0
  60. numpy-1.10.0.post2/numpy/compat/setup.py +12 -0
  61. numpy-1.10.0.post2/numpy/core/__init__.py +89 -0
  62. numpy-1.10.0.post2/numpy/core/_internal.py +761 -0
  63. numpy-1.10.0.post2/numpy/core/_methods.py +133 -0
  64. numpy-1.10.0.post2/numpy/core/arrayprint.py +760 -0
  65. numpy-1.10.0.post2/numpy/core/code_generators/cversions.txt +34 -0
  66. numpy-1.10.0.post2/numpy/core/code_generators/generate_ufunc_api.py +219 -0
  67. numpy-1.10.0.post2/numpy/core/code_generators/generate_umath.py +1017 -0
  68. numpy-1.10.0.post2/numpy/core/code_generators/numpy_api.py +415 -0
  69. numpy-1.10.0.post2/numpy/core/code_generators/ufunc_docstrings.py +3442 -0
  70. numpy-1.10.0.post2/numpy/core/defchararray.py +2689 -0
  71. numpy-1.10.0.post2/numpy/core/fromnumeric.py +3089 -0
  72. numpy-1.10.0.post2/numpy/core/function_base.py +203 -0
  73. numpy-1.10.0.post2/numpy/core/getlimits.py +308 -0
  74. numpy-1.10.0.post2/numpy/core/include/numpy/ndarrayobject.h +246 -0
  75. numpy-1.10.0.post2/numpy/core/include/numpy/ndarraytypes.h +1797 -0
  76. numpy-1.10.0.post2/numpy/core/include/numpy/npy_3kcompat.h +448 -0
  77. numpy-1.10.0.post2/numpy/core/include/numpy/npy_common.h +1051 -0
  78. numpy-1.10.0.post2/numpy/core/include/numpy/npy_cpu.h +92 -0
  79. numpy-1.10.0.post2/numpy/core/include/numpy/npy_endian.h +61 -0
  80. numpy-1.10.0.post2/numpy/core/include/numpy/npy_math.h +525 -0
  81. numpy-1.10.0.post2/numpy/core/include/numpy/numpyconfig.h +36 -0
  82. numpy-1.10.0.post2/numpy/core/machar.py +342 -0
  83. numpy-1.10.0.post2/numpy/core/memmap.py +311 -0
  84. numpy-1.10.0.post2/numpy/core/numeric.py +2893 -0
  85. numpy-1.10.0.post2/numpy/core/numerictypes.py +1036 -0
  86. numpy-1.10.0.post2/numpy/core/records.py +846 -0
  87. numpy-1.10.0.post2/numpy/core/setup.py +983 -0
  88. numpy-1.10.0.post2/numpy/core/setup_common.py +352 -0
  89. numpy-1.10.0.post2/numpy/core/shape_base.py +350 -0
  90. numpy-1.10.0.post2/numpy/core/src/multiarray/alloc.c +244 -0
  91. numpy-1.10.0.post2/numpy/core/src/multiarray/arrayobject.c +1858 -0
  92. numpy-1.10.0.post2/numpy/core/src/multiarray/arraytypes.c.src +4738 -0
  93. numpy-1.10.0.post2/numpy/core/src/multiarray/arraytypes.h +37 -0
  94. numpy-1.10.0.post2/numpy/core/src/multiarray/buffer.c +981 -0
  95. numpy-1.10.0.post2/numpy/core/src/multiarray/calculation.c +1224 -0
  96. numpy-1.10.0.post2/numpy/core/src/multiarray/cblasfuncs.c +812 -0
  97. numpy-1.10.0.post2/numpy/core/src/multiarray/cblasfuncs.h +10 -0
  98. numpy-1.10.0.post2/numpy/core/src/multiarray/common.c +911 -0
  99. numpy-1.10.0.post2/numpy/core/src/multiarray/common.h +250 -0
  100. numpy-1.10.0.post2/numpy/core/src/multiarray/compiled_base.c +1664 -0
  101. numpy-1.10.0.post2/numpy/core/src/multiarray/compiled_base.h +24 -0
  102. numpy-1.10.0.post2/numpy/core/src/multiarray/conversion_utils.c +1217 -0
  103. numpy-1.10.0.post2/numpy/core/src/multiarray/convert.c +590 -0
  104. numpy-1.10.0.post2/numpy/core/src/multiarray/convert_datatype.c +2155 -0
  105. numpy-1.10.0.post2/numpy/core/src/multiarray/ctors.c +3838 -0
  106. numpy-1.10.0.post2/numpy/core/src/multiarray/datetime.c +3821 -0
  107. numpy-1.10.0.post2/numpy/core/src/multiarray/datetime_busday.c +1322 -0
  108. numpy-1.10.0.post2/numpy/core/src/multiarray/datetime_busdaycal.c +552 -0
  109. numpy-1.10.0.post2/numpy/core/src/multiarray/datetime_strings.c +1772 -0
  110. numpy-1.10.0.post2/numpy/core/src/multiarray/descriptor.c +3719 -0
  111. numpy-1.10.0.post2/numpy/core/src/multiarray/dtype_transfer.c +4239 -0
  112. numpy-1.10.0.post2/numpy/core/src/multiarray/einsum.c.src +3005 -0
  113. numpy-1.10.0.post2/numpy/core/src/multiarray/getset.c +986 -0
  114. numpy-1.10.0.post2/numpy/core/src/multiarray/hashdescr.c +318 -0
  115. numpy-1.10.0.post2/numpy/core/src/multiarray/item_selection.c +2413 -0
  116. numpy-1.10.0.post2/numpy/core/src/multiarray/iterators.c +2192 -0
  117. numpy-1.10.0.post2/numpy/core/src/multiarray/lowlevel_strided_loops.c.src +1769 -0
  118. numpy-1.10.0.post2/numpy/core/src/multiarray/mapping.c +3380 -0
  119. numpy-1.10.0.post2/numpy/core/src/multiarray/mapping.h +77 -0
  120. numpy-1.10.0.post2/numpy/core/src/multiarray/methods.c +2514 -0
  121. numpy-1.10.0.post2/numpy/core/src/multiarray/multiarray_tests.c.src +1035 -0
  122. numpy-1.10.0.post2/numpy/core/src/multiarray/multiarraymodule.c +4628 -0
  123. numpy-1.10.0.post2/numpy/core/src/multiarray/multiarraymodule.h +15 -0
  124. numpy-1.10.0.post2/numpy/core/src/multiarray/nditer_api.c +2809 -0
  125. numpy-1.10.0.post2/numpy/core/src/multiarray/nditer_constr.c +3160 -0
  126. numpy-1.10.0.post2/numpy/core/src/multiarray/nditer_pywrap.c +2499 -0
  127. numpy-1.10.0.post2/numpy/core/src/multiarray/number.c +1106 -0
  128. numpy-1.10.0.post2/numpy/core/src/multiarray/number.h +77 -0
  129. numpy-1.10.0.post2/numpy/core/src/multiarray/numpymemoryview.c +308 -0
  130. numpy-1.10.0.post2/numpy/core/src/multiarray/numpyos.c +683 -0
  131. numpy-1.10.0.post2/numpy/core/src/multiarray/scalarapi.c +870 -0
  132. numpy-1.10.0.post2/numpy/core/src/multiarray/scalartypes.c.src +4343 -0
  133. numpy-1.10.0.post2/numpy/core/src/multiarray/scalartypes.h +55 -0
  134. numpy-1.10.0.post2/numpy/core/src/multiarray/shape.c +1131 -0
  135. numpy-1.10.0.post2/numpy/core/src/multiarray/ucsnarrow.c +174 -0
  136. numpy-1.10.0.post2/numpy/core/src/multiarray/vdot.c +180 -0
  137. numpy-1.10.0.post2/numpy/core/src/multiarray/vdot.h +18 -0
  138. numpy-1.10.0.post2/numpy/core/src/npymath/ieee754.c.src +808 -0
  139. numpy-1.10.0.post2/numpy/core/src/npymath/npy_math.c.src +597 -0
  140. numpy-1.10.0.post2/numpy/core/src/npymath/npy_math_complex.c.src +1788 -0
  141. numpy-1.10.0.post2/numpy/core/src/npymath/npy_math_private.h +544 -0
  142. numpy-1.10.0.post2/numpy/core/src/npysort/heapsort.c.src +402 -0
  143. numpy-1.10.0.post2/numpy/core/src/npysort/mergesort.c.src +488 -0
  144. numpy-1.10.0.post2/numpy/core/src/npysort/npysort_common.h +360 -0
  145. numpy-1.10.0.post2/numpy/core/src/npysort/quicksort.c.src +523 -0
  146. numpy-1.10.0.post2/numpy/core/src/npysort/selection.c.src +426 -0
  147. numpy-1.10.0.post2/numpy/core/src/private/npy_cblas.h +584 -0
  148. numpy-1.10.0.post2/numpy/core/src/private/npy_config.h +101 -0
  149. numpy-1.10.0.post2/numpy/core/src/private/npy_import.h +32 -0
  150. numpy-1.10.0.post2/numpy/core/src/private/npy_partition.h.src +122 -0
  151. numpy-1.10.0.post2/numpy/core/src/private/npy_sort.h +196 -0
  152. numpy-1.10.0.post2/numpy/core/src/private/templ_common.h.src +43 -0
  153. numpy-1.10.0.post2/numpy/core/src/private/ufunc_override.h +397 -0
  154. numpy-1.10.0.post2/numpy/core/src/umath/funcs.inc.src +356 -0
  155. numpy-1.10.0.post2/numpy/core/src/umath/loops.c.src +2675 -0
  156. numpy-1.10.0.post2/numpy/core/src/umath/loops.h.src +497 -0
  157. numpy-1.10.0.post2/numpy/core/src/umath/operand_flag_tests.c.src +105 -0
  158. numpy-1.10.0.post2/numpy/core/src/umath/scalarmath.c.src +1738 -0
  159. numpy-1.10.0.post2/numpy/core/src/umath/simd.inc.src +903 -0
  160. numpy-1.10.0.post2/numpy/core/src/umath/test_rational.c.src +1404 -0
  161. numpy-1.10.0.post2/numpy/core/src/umath/ufunc_object.c +5703 -0
  162. numpy-1.10.0.post2/numpy/core/src/umath/ufunc_type_resolution.c +2159 -0
  163. numpy-1.10.0.post2/numpy/core/src/umath/umath_tests.c.src +392 -0
  164. numpy-1.10.0.post2/numpy/core/src/umath/umathmodule.c +443 -0
  165. numpy-1.10.0.post2/numpy/core/tests/test_abc.py +47 -0
  166. numpy-1.10.0.post2/numpy/core/tests/test_api.py +515 -0
  167. numpy-1.10.0.post2/numpy/core/tests/test_arrayprint.py +171 -0
  168. numpy-1.10.0.post2/numpy/core/tests/test_datetime.py +1820 -0
  169. numpy-1.10.0.post2/numpy/core/tests/test_defchararray.py +703 -0
  170. numpy-1.10.0.post2/numpy/core/tests/test_deprecations.py +619 -0
  171. numpy-1.10.0.post2/numpy/core/tests/test_dtype.py +578 -0
  172. numpy-1.10.0.post2/numpy/core/tests/test_einsum.py +627 -0
  173. numpy-1.10.0.post2/numpy/core/tests/test_errstate.py +52 -0
  174. numpy-1.10.0.post2/numpy/core/tests/test_function_base.py +142 -0
  175. numpy-1.10.0.post2/numpy/core/tests/test_getlimits.py +77 -0
  176. numpy-1.10.0.post2/numpy/core/tests/test_half.py +436 -0
  177. numpy-1.10.0.post2/numpy/core/tests/test_indexerrors.py +126 -0
  178. numpy-1.10.0.post2/numpy/core/tests/test_indexing.py +1047 -0
  179. numpy-1.10.0.post2/numpy/core/tests/test_item_selection.py +73 -0
  180. numpy-1.10.0.post2/numpy/core/tests/test_machar.py +29 -0
  181. numpy-1.10.0.post2/numpy/core/tests/test_memmap.py +130 -0
  182. numpy-1.10.0.post2/numpy/core/tests/test_multiarray.py +5924 -0
  183. numpy-1.10.0.post2/numpy/core/tests/test_multiarray_assignment.py +84 -0
  184. numpy-1.10.0.post2/numpy/core/tests/test_nditer.py +2638 -0
  185. numpy-1.10.0.post2/numpy/core/tests/test_numeric.py +2204 -0
  186. numpy-1.10.0.post2/numpy/core/tests/test_numerictypes.py +382 -0
  187. numpy-1.10.0.post2/numpy/core/tests/test_print.py +248 -0
  188. numpy-1.10.0.post2/numpy/core/tests/test_records.py +299 -0
  189. numpy-1.10.0.post2/numpy/core/tests/test_regression.py +2177 -0
  190. numpy-1.10.0.post2/numpy/core/tests/test_scalarinherit.py +41 -0
  191. numpy-1.10.0.post2/numpy/core/tests/test_scalarmath.py +316 -0
  192. numpy-1.10.0.post2/numpy/core/tests/test_shape_base.py +319 -0
  193. numpy-1.10.0.post2/numpy/core/tests/test_ufunc.py +1227 -0
  194. numpy-1.10.0.post2/numpy/core/tests/test_umath.py +1933 -0
  195. numpy-1.10.0.post2/numpy/core/tests/test_umath_complex.py +538 -0
  196. numpy-1.10.0.post2/numpy/core/tests/test_unicode.py +360 -0
  197. numpy-1.10.0.post2/numpy/distutils/__init__.py +23 -0
  198. numpy-1.10.0.post2/numpy/distutils/ccompiler.py +690 -0
  199. numpy-1.10.0.post2/numpy/distutils/command/autodist.py +94 -0
  200. numpy-1.10.0.post2/numpy/distutils/command/build.py +47 -0
  201. numpy-1.10.0.post2/numpy/distutils/command/build_clib.py +295 -0
  202. numpy-1.10.0.post2/numpy/distutils/command/build_ext.py +522 -0
  203. numpy-1.10.0.post2/numpy/distutils/command/config.py +437 -0
  204. numpy-1.10.0.post2/numpy/distutils/exec_command.py +651 -0
  205. numpy-1.10.0.post2/numpy/distutils/fcompiler/compaq.py +128 -0
  206. numpy-1.10.0.post2/numpy/distutils/fcompiler/gnu.py +403 -0
  207. numpy-1.10.0.post2/numpy/distutils/fcompiler/intel.py +217 -0
  208. numpy-1.10.0.post2/numpy/distutils/fcompiler/pg.py +63 -0
  209. numpy-1.10.0.post2/numpy/distutils/fcompiler/sun.py +55 -0
  210. numpy-1.10.0.post2/numpy/distutils/intelccompiler.py +95 -0
  211. numpy-1.10.0.post2/numpy/distutils/lib2def.py +116 -0
  212. numpy-1.10.0.post2/numpy/distutils/mingw32ccompiler.py +599 -0
  213. numpy-1.10.0.post2/numpy/distutils/misc_util.py +2306 -0
  214. numpy-1.10.0.post2/numpy/distutils/msvc9compiler.py +23 -0
  215. numpy-1.10.0.post2/numpy/distutils/msvccompiler.py +17 -0
  216. numpy-1.10.0.post2/numpy/distutils/npy_pkg_config.py +451 -0
  217. numpy-1.10.0.post2/numpy/distutils/system_info.py +2397 -0
  218. numpy-1.10.0.post2/numpy/distutils/tests/f2py_ext/tests/test_fib2.py +12 -0
  219. numpy-1.10.0.post2/numpy/distutils/tests/f2py_f90_ext/tests/test_foo.py +11 -0
  220. numpy-1.10.0.post2/numpy/distutils/tests/gen_ext/tests/test_fib3.py +11 -0
  221. numpy-1.10.0.post2/numpy/distutils/tests/pyrex_ext/tests/test_primes.py +13 -0
  222. numpy-1.10.0.post2/numpy/distutils/tests/swig_ext/__init__.py +1 -0
  223. numpy-1.10.0.post2/numpy/distutils/tests/swig_ext/tests/test_example.py +17 -0
  224. numpy-1.10.0.post2/numpy/distutils/tests/swig_ext/tests/test_example2.py +15 -0
  225. numpy-1.10.0.post2/numpy/distutils/tests/test_fcompiler_gnu.py +60 -0
  226. numpy-1.10.0.post2/numpy/distutils/tests/test_fcompiler_intel.py +36 -0
  227. numpy-1.10.0.post2/numpy/distutils/tests/test_misc_util.py +79 -0
  228. numpy-1.10.0.post2/numpy/distutils/tests/test_npy_pkg_config.py +102 -0
  229. numpy-1.10.0.post2/numpy/distutils/tests/test_system_info.py +209 -0
  230. numpy-1.10.0.post2/numpy/distutils/unixccompiler.py +125 -0
  231. numpy-1.10.0.post2/numpy/doc/byteswapping.py +156 -0
  232. numpy-1.10.0.post2/numpy/doc/creation.py +144 -0
  233. numpy-1.10.0.post2/numpy/doc/glossary.py +423 -0
  234. numpy-1.10.0.post2/numpy/doc/indexing.py +439 -0
  235. numpy-1.10.0.post2/numpy/doc/structured_arrays.py +290 -0
  236. numpy-1.10.0.post2/numpy/f2py/__init__.py +49 -0
  237. numpy-1.10.0.post2/numpy/f2py/__main__.py +25 -0
  238. numpy-1.10.0.post2/numpy/f2py/auxfuncs.py +858 -0
  239. numpy-1.10.0.post2/numpy/f2py/capi_maps.py +851 -0
  240. numpy-1.10.0.post2/numpy/f2py/cb_rules.py +554 -0
  241. numpy-1.10.0.post2/numpy/f2py/cfuncs.py +1261 -0
  242. numpy-1.10.0.post2/numpy/f2py/common_rules.py +150 -0
  243. numpy-1.10.0.post2/numpy/f2py/crackfortran.py +3314 -0
  244. numpy-1.10.0.post2/numpy/f2py/diagnose.py +156 -0
  245. numpy-1.10.0.post2/numpy/f2py/f2py2e.py +656 -0
  246. numpy-1.10.0.post2/numpy/f2py/f2py_testing.py +48 -0
  247. numpy-1.10.0.post2/numpy/f2py/f90mod_rules.py +272 -0
  248. numpy-1.10.0.post2/numpy/f2py/func2subr.py +299 -0
  249. numpy-1.10.0.post2/numpy/f2py/rules.py +1475 -0
  250. numpy-1.10.0.post2/numpy/f2py/setup.py +117 -0
  251. numpy-1.10.0.post2/numpy/f2py/src/fortranobject.c +1037 -0
  252. numpy-1.10.0.post2/numpy/f2py/src/fortranobject.h +162 -0
  253. numpy-1.10.0.post2/numpy/f2py/tests/src/array_from_pyobj/wrapmodule.c +223 -0
  254. numpy-1.10.0.post2/numpy/f2py/tests/test_array_from_pyobj.py +593 -0
  255. numpy-1.10.0.post2/numpy/f2py/tests/test_assumed_shape.py +35 -0
  256. numpy-1.10.0.post2/numpy/f2py/tests/test_callback.py +136 -0
  257. numpy-1.10.0.post2/numpy/f2py/tests/test_kind.py +36 -0
  258. numpy-1.10.0.post2/numpy/f2py/tests/test_mixed.py +40 -0
  259. numpy-1.10.0.post2/numpy/f2py/tests/test_regression.py +34 -0
  260. numpy-1.10.0.post2/numpy/f2py/tests/test_return_character.py +148 -0
  261. numpy-1.10.0.post2/numpy/f2py/tests/test_return_complex.py +170 -0
  262. numpy-1.10.0.post2/numpy/f2py/tests/test_return_integer.py +180 -0
  263. numpy-1.10.0.post2/numpy/f2py/tests/test_return_logical.py +189 -0
  264. numpy-1.10.0.post2/numpy/f2py/tests/test_return_real.py +206 -0
  265. numpy-1.10.0.post2/numpy/f2py/tests/test_size.py +44 -0
  266. numpy-1.10.0.post2/numpy/f2py/tests/util.py +367 -0
  267. numpy-1.10.0.post2/numpy/f2py/use_rules.py +115 -0
  268. numpy-1.10.0.post2/numpy/fft/fftpack.c +1501 -0
  269. numpy-1.10.0.post2/numpy/fft/fftpack.h +28 -0
  270. numpy-1.10.0.post2/numpy/fft/fftpack.py +1241 -0
  271. numpy-1.10.0.post2/numpy/fft/fftpack_litemodule.c +363 -0
  272. numpy-1.10.0.post2/numpy/fft/info.py +187 -0
  273. numpy-1.10.0.post2/numpy/fft/setup.py +19 -0
  274. numpy-1.10.0.post2/numpy/fft/tests/test_fftpack.py +166 -0
  275. numpy-1.10.0.post2/numpy/fft/tests/test_helper.py +78 -0
  276. numpy-1.10.0.post2/numpy/lib/_iotools.py +917 -0
  277. numpy-1.10.0.post2/numpy/lib/arraypad.py +1497 -0
  278. numpy-1.10.0.post2/numpy/lib/arraysetops.py +480 -0
  279. numpy-1.10.0.post2/numpy/lib/arrayterator.py +226 -0
  280. numpy-1.10.0.post2/numpy/lib/financial.py +737 -0
  281. numpy-1.10.0.post2/numpy/lib/format.py +814 -0
  282. numpy-1.10.0.post2/numpy/lib/function_base.py +4150 -0
  283. numpy-1.10.0.post2/numpy/lib/index_tricks.py +874 -0
  284. numpy-1.10.0.post2/numpy/lib/info.py +152 -0
  285. numpy-1.10.0.post2/numpy/lib/nanfunctions.py +1237 -0
  286. numpy-1.10.0.post2/numpy/lib/npyio.py +1992 -0
  287. numpy-1.10.0.post2/numpy/lib/polynomial.py +1277 -0
  288. numpy-1.10.0.post2/numpy/lib/recfunctions.py +1003 -0
  289. numpy-1.10.0.post2/numpy/lib/setup.py +12 -0
  290. numpy-1.10.0.post2/numpy/lib/shape_base.py +872 -0
  291. numpy-1.10.0.post2/numpy/lib/stride_tricks.py +200 -0
  292. numpy-1.10.0.post2/numpy/lib/tests/data/py2-objarr.npy +0 -0
  293. numpy-1.10.0.post2/numpy/lib/tests/data/py2-objarr.npz +0 -0
  294. numpy-1.10.0.post2/numpy/lib/tests/data/py3-objarr.npy +0 -0
  295. numpy-1.10.0.post2/numpy/lib/tests/data/py3-objarr.npz +0 -0
  296. numpy-1.10.0.post2/numpy/lib/tests/test__iotools.py +348 -0
  297. numpy-1.10.0.post2/numpy/lib/tests/test__version.py +70 -0
  298. numpy-1.10.0.post2/numpy/lib/tests/test_arraypad.py +1047 -0
  299. numpy-1.10.0.post2/numpy/lib/tests/test_arraysetops.py +309 -0
  300. numpy-1.10.0.post2/numpy/lib/tests/test_financial.py +163 -0
  301. numpy-1.10.0.post2/numpy/lib/tests/test_format.py +841 -0
  302. numpy-1.10.0.post2/numpy/lib/tests/test_function_base.py +2555 -0
  303. numpy-1.10.0.post2/numpy/lib/tests/test_index_tricks.py +326 -0
  304. numpy-1.10.0.post2/numpy/lib/tests/test_io.py +1916 -0
  305. numpy-1.10.0.post2/numpy/lib/tests/test_nanfunctions.py +707 -0
  306. numpy-1.10.0.post2/numpy/lib/tests/test_packbits.py +26 -0
  307. numpy-1.10.0.post2/numpy/lib/tests/test_polynomial.py +188 -0
  308. numpy-1.10.0.post2/numpy/lib/tests/test_recfunctions.py +734 -0
  309. numpy-1.10.0.post2/numpy/lib/tests/test_shape_base.py +386 -0
  310. numpy-1.10.0.post2/numpy/lib/tests/test_stride_tricks.py +405 -0
  311. numpy-1.10.0.post2/numpy/lib/tests/test_twodim_base.py +535 -0
  312. numpy-1.10.0.post2/numpy/lib/tests/test_type_check.py +332 -0
  313. numpy-1.10.0.post2/numpy/lib/twodim_base.py +1007 -0
  314. numpy-1.10.0.post2/numpy/lib/type_check.py +596 -0
  315. numpy-1.10.0.post2/numpy/lib/utils.py +1122 -0
  316. numpy-1.10.0.post2/numpy/linalg/lapack_lite/python_xerbla.c +46 -0
  317. numpy-1.10.0.post2/numpy/linalg/lapack_litemodule.c +358 -0
  318. numpy-1.10.0.post2/numpy/linalg/linalg.py +2406 -0
  319. numpy-1.10.0.post2/numpy/linalg/tests/test_build.py +59 -0
  320. numpy-1.10.0.post2/numpy/linalg/tests/test_linalg.py +1351 -0
  321. numpy-1.10.0.post2/numpy/linalg/tests/test_regression.py +95 -0
  322. numpy-1.10.0.post2/numpy/linalg/umath_linalg.c.src +3236 -0
  323. numpy-1.10.0.post2/numpy/ma/__init__.py +56 -0
  324. numpy-1.10.0.post2/numpy/ma/bench.py +131 -0
  325. numpy-1.10.0.post2/numpy/ma/core.py +7608 -0
  326. numpy-1.10.0.post2/numpy/ma/extras.py +1953 -0
  327. numpy-1.10.0.post2/numpy/ma/mrecords.py +796 -0
  328. numpy-1.10.0.post2/numpy/ma/setup.py +13 -0
  329. numpy-1.10.0.post2/numpy/ma/tests/test_core.py +4100 -0
  330. numpy-1.10.0.post2/numpy/ma/tests/test_extras.py +1132 -0
  331. numpy-1.10.0.post2/numpy/ma/tests/test_mrecords.py +520 -0
  332. numpy-1.10.0.post2/numpy/ma/tests/test_old_ma.py +879 -0
  333. numpy-1.10.0.post2/numpy/ma/tests/test_regression.py +80 -0
  334. numpy-1.10.0.post2/numpy/ma/tests/test_subclassing.py +338 -0
  335. numpy-1.10.0.post2/numpy/ma/testutils.py +289 -0
  336. numpy-1.10.0.post2/numpy/ma/timer_comparison.py +440 -0
  337. numpy-1.10.0.post2/numpy/matlib.py +358 -0
  338. numpy-1.10.0.post2/numpy/matrixlib/defmatrix.py +1232 -0
  339. numpy-1.10.0.post2/numpy/matrixlib/tests/test_defmatrix.py +449 -0
  340. numpy-1.10.0.post2/numpy/matrixlib/tests/test_multiarray.py +23 -0
  341. numpy-1.10.0.post2/numpy/matrixlib/tests/test_numeric.py +23 -0
  342. numpy-1.10.0.post2/numpy/matrixlib/tests/test_regression.py +37 -0
  343. numpy-1.10.0.post2/numpy/polynomial/_polybase.py +962 -0
  344. numpy-1.10.0.post2/numpy/polynomial/chebyshev.py +2056 -0
  345. numpy-1.10.0.post2/numpy/polynomial/hermite.py +1831 -0
  346. numpy-1.10.0.post2/numpy/polynomial/hermite_e.py +1828 -0
  347. numpy-1.10.0.post2/numpy/polynomial/laguerre.py +1780 -0
  348. numpy-1.10.0.post2/numpy/polynomial/legendre.py +1808 -0
  349. numpy-1.10.0.post2/numpy/polynomial/polyutils.py +403 -0
  350. numpy-1.10.0.post2/numpy/random/mtrand/distributions.c +912 -0
  351. numpy-1.10.0.post2/numpy/random/mtrand/mtrand.c +34805 -0
  352. numpy-1.10.0.post2/numpy/random/mtrand/mtrand.pyx +4766 -0
  353. numpy-1.10.0.post2/numpy/random/setup.py +61 -0
  354. numpy-1.10.0.post2/numpy/random/tests/test_random.py +723 -0
  355. numpy-1.10.0.post2/numpy/random/tests/test_regression.py +117 -0
  356. numpy-1.10.0.post2/numpy/setup.py +29 -0
  357. numpy-1.10.0.post2/numpy/testing/__init__.py +15 -0
  358. numpy-1.10.0.post2/numpy/testing/decorators.py +271 -0
  359. numpy-1.10.0.post2/numpy/testing/noseclasses.py +353 -0
  360. numpy-1.10.0.post2/numpy/testing/nosetester.py +511 -0
  361. numpy-1.10.0.post2/numpy/testing/print_coercion_tables.py +91 -0
  362. numpy-1.10.0.post2/numpy/testing/setup.py +20 -0
  363. numpy-1.10.0.post2/numpy/testing/tests/test_decorators.py +182 -0
  364. numpy-1.10.0.post2/numpy/testing/tests/test_utils.py +781 -0
  365. numpy-1.10.0.post2/numpy/testing/utils.py +1831 -0
  366. numpy-1.10.0.post2/numpy/tests/test_ctypeslib.py +106 -0
  367. numpy-1.10.0.post2/numpy/tests/test_matlib.py +55 -0
  368. numpy-1.10.0.post2/numpy/tests/test_scripts.py +69 -0
  369. numpy-1.10.0.post2/numpy/version.py +10 -0
  370. numpy-1.10.0.post2/setup.py +260 -0
  371. numpy-1.10.0.post2/site.cfg.example +193 -0
  372. numpy-1.10.0.post2/tmp.txt +789 -0
  373. numpy-1.10.0.post2/tools/swig/README +145 -0
  374. numpy-1.10.0.post2/tools/swig/numpy.i +3161 -0
  375. numpy-1.10.0.post2/tools/swig/test/Array.i +135 -0
  376. numpy-1.10.0.post2/tools/swig/test/ArrayZ.cxx +131 -0
  377. numpy-1.10.0.post2/tools/swig/test/ArrayZ.h +56 -0
  378. numpy-1.10.0.post2/tools/swig/test/Flat.cxx +36 -0
  379. numpy-1.10.0.post2/tools/swig/test/Flat.h +34 -0
  380. numpy-1.10.0.post2/tools/swig/test/Flat.i +36 -0
  381. numpy-1.10.0.post2/tools/swig/test/Makefile +37 -0
  382. numpy-1.10.0.post2/tools/swig/test/setup.py +71 -0
  383. numpy-1.10.0.post2/tools/swig/test/testArray.py +385 -0
  384. numpy-1.10.0.post2/tools/swig/test/testFarray.py +159 -0
  385. numpy-1.10.0.post2/tools/swig/test/testFlat.py +200 -0
  386. numpy-1.10.0.post2/tools/swig/test/testFortran.py +173 -0
  387. numpy-1.10.0.post2/tools/swig/test/testMatrix.py +362 -0
  388. numpy-1.10.0.post2/tools/swig/test/testSuperTensor.py +388 -0
  389. numpy-1.10.0.post2/tools/swig/test/testTensor.py +402 -0
  390. numpy-1.10.0.post2/tools/swig/test/testVector.py +381 -0
  391. numpy-1.9.3/INSTALL.txt +0 -138
  392. numpy-1.9.3/LICENSE.txt +0 -30
  393. numpy-1.9.3/MANIFEST.in +0 -26
  394. numpy-1.9.3/PKG-INFO +0 -39
  395. numpy-1.9.3/doc/release/1.9.3-notes.rst +0 -23
  396. numpy-1.9.3/doc/source/conf.py +0 -331
  397. numpy-1.9.3/doc/source/dev/gitwash/branch_list.png +0 -0
  398. numpy-1.9.3/doc/source/dev/gitwash/branch_list_compare.png +0 -0
  399. numpy-1.9.3/doc/source/dev/gitwash/development_workflow.rst +0 -568
  400. numpy-1.9.3/doc/source/dev/gitwash/git_links.inc +0 -88
  401. numpy-1.9.3/doc/source/dev/gitwash/index.rst +0 -14
  402. numpy-1.9.3/doc/source/dev/index.rst +0 -10
  403. numpy-1.9.3/doc/source/reference/arrays.classes.rst +0 -427
  404. numpy-1.9.3/doc/source/reference/arrays.dtypes.rst +0 -534
  405. numpy-1.9.3/doc/source/reference/arrays.indexing.rst +0 -550
  406. numpy-1.9.3/doc/source/reference/arrays.interface.rst +0 -336
  407. numpy-1.9.3/doc/source/reference/arrays.ndarray.rst +0 -609
  408. numpy-1.9.3/doc/source/reference/arrays.scalars.rst +0 -291
  409. numpy-1.9.3/doc/source/reference/c-api.array.rst +0 -3362
  410. numpy-1.9.3/doc/source/reference/c-api.config.rst +0 -103
  411. numpy-1.9.3/doc/source/reference/c-api.coremath.rst +0 -420
  412. numpy-1.9.3/doc/source/reference/c-api.dtype.rst +0 -376
  413. numpy-1.9.3/doc/source/reference/c-api.generalized-ufuncs.rst +0 -171
  414. numpy-1.9.3/doc/source/reference/c-api.iterator.rst +0 -1298
  415. numpy-1.9.3/doc/source/reference/c-api.types-and-structures.rst +0 -1204
  416. numpy-1.9.3/doc/source/reference/c-api.ufunc.rst +0 -399
  417. numpy-1.9.3/doc/source/reference/index.rst +0 -44
  418. numpy-1.9.3/doc/source/reference/internals.code-explanations.rst +0 -666
  419. numpy-1.9.3/doc/source/reference/routines.array-manipulation.rst +0 -113
  420. numpy-1.9.3/doc/source/reference/routines.io.rst +0 -74
  421. numpy-1.9.3/doc/source/reference/routines.linalg.rst +0 -88
  422. numpy-1.9.3/doc/source/reference/routines.ma.rst +0 -405
  423. numpy-1.9.3/doc/source/reference/routines.sort.rst +0 -42
  424. numpy-1.9.3/doc/source/reference/routines.statistics.rst +0 -55
  425. numpy-1.9.3/doc/source/reference/swig.interface-file.rst +0 -1055
  426. numpy-1.9.3/doc/source/reference/swig.testing.rst +0 -166
  427. numpy-1.9.3/doc/source/reference/ufuncs.rst +0 -651
  428. numpy-1.9.3/doc/source/release.rst +0 -19
  429. numpy-1.9.3/doc/source/user/basics.io.genfromtxt.rst +0 -531
  430. numpy-1.9.3/doc/source/user/basics.rec.rst +0 -7
  431. numpy-1.9.3/doc/source/user/c-info.beyond-basics.rst +0 -560
  432. numpy-1.9.3/doc/source/user/c-info.how-to-extend.rst +0 -642
  433. numpy-1.9.3/doc/source/user/c-info.python-as-glue.rst +0 -1528
  434. numpy-1.9.3/doc/source/user/c-info.ufunc-tutorial.rst +0 -1211
  435. numpy-1.9.3/doc/source/user/install.rst +0 -180
  436. numpy-1.9.3/numpy/__init__.py +0 -216
  437. numpy-1.9.3/numpy/_import_tools.py +0 -348
  438. numpy-1.9.3/numpy/add_newdocs.py +0 -7518
  439. numpy-1.9.3/numpy/compat/_inspect.py +0 -221
  440. numpy-1.9.3/numpy/compat/py3k.py +0 -89
  441. numpy-1.9.3/numpy/compat/setup.py +0 -12
  442. numpy-1.9.3/numpy/core/__init__.py +0 -78
  443. numpy-1.9.3/numpy/core/_internal.py +0 -570
  444. numpy-1.9.3/numpy/core/_methods.py +0 -134
  445. numpy-1.9.3/numpy/core/arrayprint.py +0 -752
  446. numpy-1.9.3/numpy/core/blasdot/_dotblas.c +0 -1255
  447. numpy-1.9.3/numpy/core/blasdot/apple_sgemv_patch.c +0 -216
  448. numpy-1.9.3/numpy/core/blasdot/cblas.h +0 -578
  449. numpy-1.9.3/numpy/core/code_generators/cversions.txt +0 -31
  450. numpy-1.9.3/numpy/core/code_generators/generate_ufunc_api.py +0 -219
  451. numpy-1.9.3/numpy/core/code_generators/generate_umath.py +0 -972
  452. numpy-1.9.3/numpy/core/code_generators/numpy_api.py +0 -412
  453. numpy-1.9.3/numpy/core/code_generators/ufunc_docstrings.py +0 -3419
  454. numpy-1.9.3/numpy/core/defchararray.py +0 -2687
  455. numpy-1.9.3/numpy/core/fromnumeric.py +0 -2938
  456. numpy-1.9.3/numpy/core/function_base.py +0 -190
  457. numpy-1.9.3/numpy/core/getlimits.py +0 -306
  458. numpy-1.9.3/numpy/core/include/numpy/fenv/fenv.c +0 -38
  459. numpy-1.9.3/numpy/core/include/numpy/fenv/fenv.h +0 -224
  460. numpy-1.9.3/numpy/core/include/numpy/ndarrayobject.h +0 -237
  461. numpy-1.9.3/numpy/core/include/numpy/ndarraytypes.h +0 -1820
  462. numpy-1.9.3/numpy/core/include/numpy/npy_3kcompat.h +0 -506
  463. numpy-1.9.3/numpy/core/include/numpy/npy_common.h +0 -1038
  464. numpy-1.9.3/numpy/core/include/numpy/npy_cpu.h +0 -122
  465. numpy-1.9.3/numpy/core/include/numpy/npy_endian.h +0 -49
  466. numpy-1.9.3/numpy/core/include/numpy/npy_math.h +0 -479
  467. numpy-1.9.3/numpy/core/include/numpy/numpyconfig.h +0 -35
  468. numpy-1.9.3/numpy/core/machar.py +0 -338
  469. numpy-1.9.3/numpy/core/memmap.py +0 -308
  470. numpy-1.9.3/numpy/core/numeric.py +0 -2842
  471. numpy-1.9.3/numpy/core/numerictypes.py +0 -1042
  472. numpy-1.9.3/numpy/core/records.py +0 -804
  473. numpy-1.9.3/numpy/core/setup.py +0 -1016
  474. numpy-1.9.3/numpy/core/setup_common.py +0 -330
  475. numpy-1.9.3/numpy/core/shape_base.py +0 -277
  476. numpy-1.9.3/numpy/core/src/multiarray/alloc.c +0 -241
  477. numpy-1.9.3/numpy/core/src/multiarray/arrayobject.c +0 -1791
  478. numpy-1.9.3/numpy/core/src/multiarray/arraytypes.c.src +0 -4372
  479. numpy-1.9.3/numpy/core/src/multiarray/arraytypes.h +0 -13
  480. numpy-1.9.3/numpy/core/src/multiarray/buffer.c +0 -954
  481. numpy-1.9.3/numpy/core/src/multiarray/calculation.c +0 -1229
  482. numpy-1.9.3/numpy/core/src/multiarray/common.c +0 -798
  483. numpy-1.9.3/numpy/core/src/multiarray/common.h +0 -328
  484. numpy-1.9.3/numpy/core/src/multiarray/conversion_utils.c +0 -1240
  485. numpy-1.9.3/numpy/core/src/multiarray/convert.c +0 -589
  486. numpy-1.9.3/numpy/core/src/multiarray/convert_datatype.c +0 -2199
  487. numpy-1.9.3/numpy/core/src/multiarray/ctors.c +0 -3785
  488. numpy-1.9.3/numpy/core/src/multiarray/datetime.c +0 -3823
  489. numpy-1.9.3/numpy/core/src/multiarray/datetime_busday.c +0 -1322
  490. numpy-1.9.3/numpy/core/src/multiarray/datetime_busdaycal.c +0 -552
  491. numpy-1.9.3/numpy/core/src/multiarray/datetime_strings.c +0 -1772
  492. numpy-1.9.3/numpy/core/src/multiarray/descriptor.c +0 -3658
  493. numpy-1.9.3/numpy/core/src/multiarray/dtype_transfer.c +0 -4232
  494. numpy-1.9.3/numpy/core/src/multiarray/einsum.c.src +0 -3013
  495. numpy-1.9.3/numpy/core/src/multiarray/getset.c +0 -984
  496. numpy-1.9.3/numpy/core/src/multiarray/hashdescr.c +0 -319
  497. numpy-1.9.3/numpy/core/src/multiarray/item_selection.c +0 -2711
  498. numpy-1.9.3/numpy/core/src/multiarray/iterators.c +0 -2160
  499. numpy-1.9.3/numpy/core/src/multiarray/lowlevel_strided_loops.c.src +0 -1767
  500. numpy-1.9.3/numpy/core/src/multiarray/mapping.c +0 -3316
  501. numpy-1.9.3/numpy/core/src/multiarray/mapping.h +0 -73
  502. numpy-1.9.3/numpy/core/src/multiarray/methods.c +0 -2497
  503. numpy-1.9.3/numpy/core/src/multiarray/multiarray_tests.c.src +0 -977
  504. numpy-1.9.3/numpy/core/src/multiarray/multiarraymodule.c +0 -4200
  505. numpy-1.9.3/numpy/core/src/multiarray/multiarraymodule.h +0 -4
  506. numpy-1.9.3/numpy/core/src/multiarray/nditer_api.c +0 -2809
  507. numpy-1.9.3/numpy/core/src/multiarray/nditer_constr.c +0 -3159
  508. numpy-1.9.3/numpy/core/src/multiarray/nditer_pywrap.c +0 -2492
  509. numpy-1.9.3/numpy/core/src/multiarray/number.c +0 -1057
  510. numpy-1.9.3/numpy/core/src/multiarray/number.h +0 -76
  511. numpy-1.9.3/numpy/core/src/multiarray/numpymemoryview.c +0 -309
  512. numpy-1.9.3/numpy/core/src/multiarray/numpyos.c +0 -683
  513. numpy-1.9.3/numpy/core/src/multiarray/scalarapi.c +0 -861
  514. numpy-1.9.3/numpy/core/src/multiarray/scalartypes.c.src +0 -4270
  515. numpy-1.9.3/numpy/core/src/multiarray/scalartypes.h +0 -52
  516. numpy-1.9.3/numpy/core/src/multiarray/shape.c +0 -1141
  517. numpy-1.9.3/numpy/core/src/multiarray/ucsnarrow.c +0 -173
  518. numpy-1.9.3/numpy/core/src/npymath/ieee754.c.src +0 -814
  519. numpy-1.9.3/numpy/core/src/npymath/npy_math.c.src +0 -527
  520. numpy-1.9.3/numpy/core/src/npymath/npy_math_complex.c.src +0 -291
  521. numpy-1.9.3/numpy/core/src/npymath/npy_math_private.h +0 -539
  522. numpy-1.9.3/numpy/core/src/npysort/heapsort.c.src +0 -341
  523. numpy-1.9.3/numpy/core/src/npysort/mergesort.c.src +0 -428
  524. numpy-1.9.3/numpy/core/src/npysort/npysort_common.h +0 -367
  525. numpy-1.9.3/numpy/core/src/npysort/quicksort.c.src +0 -363
  526. numpy-1.9.3/numpy/core/src/npysort/selection.c.src +0 -474
  527. numpy-1.9.3/numpy/core/src/private/npy_config.h +0 -68
  528. numpy-1.9.3/numpy/core/src/private/npy_partition.h.src +0 -138
  529. numpy-1.9.3/numpy/core/src/private/npy_sort.h +0 -194
  530. numpy-1.9.3/numpy/core/src/private/scalarmathmodule.h.src +0 -42
  531. numpy-1.9.3/numpy/core/src/private/ufunc_override.h +0 -384
  532. numpy-1.9.3/numpy/core/src/scalarmathmodule.c.src +0 -1980
  533. numpy-1.9.3/numpy/core/src/umath/funcs.inc.src +0 -715
  534. numpy-1.9.3/numpy/core/src/umath/loops.c.src +0 -2654
  535. numpy-1.9.3/numpy/core/src/umath/loops.h.src +0 -501
  536. numpy-1.9.3/numpy/core/src/umath/operand_flag_tests.c.src +0 -105
  537. numpy-1.9.3/numpy/core/src/umath/simd.inc.src +0 -881
  538. numpy-1.9.3/numpy/core/src/umath/test_rational.c.src +0 -1404
  539. numpy-1.9.3/numpy/core/src/umath/ufunc_object.c +0 -5520
  540. numpy-1.9.3/numpy/core/src/umath/ufunc_type_resolution.c +0 -2164
  541. numpy-1.9.3/numpy/core/src/umath/umath_tests.c.src +0 -341
  542. numpy-1.9.3/numpy/core/src/umath/umathmodule.c +0 -561
  543. numpy-1.9.3/numpy/core/tests/test_abc.py +0 -45
  544. numpy-1.9.3/numpy/core/tests/test_api.py +0 -514
  545. numpy-1.9.3/numpy/core/tests/test_arrayprint.py +0 -167
  546. numpy-1.9.3/numpy/core/tests/test_blasdot.py +0 -249
  547. numpy-1.9.3/numpy/core/tests/test_datetime.py +0 -1781
  548. numpy-1.9.3/numpy/core/tests/test_defchararray.py +0 -642
  549. numpy-1.9.3/numpy/core/tests/test_deprecations.py +0 -512
  550. numpy-1.9.3/numpy/core/tests/test_dtype.py +0 -542
  551. numpy-1.9.3/numpy/core/tests/test_einsum.py +0 -583
  552. numpy-1.9.3/numpy/core/tests/test_errstate.py +0 -51
  553. numpy-1.9.3/numpy/core/tests/test_function_base.py +0 -111
  554. numpy-1.9.3/numpy/core/tests/test_getlimits.py +0 -86
  555. numpy-1.9.3/numpy/core/tests/test_half.py +0 -439
  556. numpy-1.9.3/numpy/core/tests/test_indexerrors.py +0 -127
  557. numpy-1.9.3/numpy/core/tests/test_indexing.py +0 -1014
  558. numpy-1.9.3/numpy/core/tests/test_item_selection.py +0 -70
  559. numpy-1.9.3/numpy/core/tests/test_machar.py +0 -30
  560. numpy-1.9.3/numpy/core/tests/test_memmap.py +0 -127
  561. numpy-1.9.3/numpy/core/tests/test_multiarray.py +0 -4645
  562. numpy-1.9.3/numpy/core/tests/test_multiarray_assignment.py +0 -80
  563. numpy-1.9.3/numpy/core/tests/test_nditer.py +0 -2630
  564. numpy-1.9.3/numpy/core/tests/test_numeric.py +0 -2117
  565. numpy-1.9.3/numpy/core/tests/test_numerictypes.py +0 -377
  566. numpy-1.9.3/numpy/core/tests/test_print.py +0 -245
  567. numpy-1.9.3/numpy/core/tests/test_records.py +0 -185
  568. numpy-1.9.3/numpy/core/tests/test_regression.py +0 -2115
  569. numpy-1.9.3/numpy/core/tests/test_scalarinherit.py +0 -34
  570. numpy-1.9.3/numpy/core/tests/test_scalarmath.py +0 -275
  571. numpy-1.9.3/numpy/core/tests/test_shape_base.py +0 -250
  572. numpy-1.9.3/numpy/core/tests/test_ufunc.py +0 -1153
  573. numpy-1.9.3/numpy/core/tests/test_umath.py +0 -1695
  574. numpy-1.9.3/numpy/core/tests/test_umath_complex.py +0 -537
  575. numpy-1.9.3/numpy/core/tests/test_unicode.py +0 -357
  576. numpy-1.9.3/numpy/distutils/__init__.py +0 -39
  577. numpy-1.9.3/numpy/distutils/ccompiler.py +0 -656
  578. numpy-1.9.3/numpy/distutils/command/autodist.py +0 -43
  579. numpy-1.9.3/numpy/distutils/command/build.py +0 -39
  580. numpy-1.9.3/numpy/distutils/command/build_clib.py +0 -284
  581. numpy-1.9.3/numpy/distutils/command/build_ext.py +0 -515
  582. numpy-1.9.3/numpy/distutils/command/config.py +0 -476
  583. numpy-1.9.3/numpy/distutils/exec_command.py +0 -618
  584. numpy-1.9.3/numpy/distutils/fcompiler/compaq.py +0 -128
  585. numpy-1.9.3/numpy/distutils/fcompiler/gnu.py +0 -390
  586. numpy-1.9.3/numpy/distutils/fcompiler/intel.py +0 -205
  587. numpy-1.9.3/numpy/distutils/fcompiler/pg.py +0 -60
  588. numpy-1.9.3/numpy/distutils/fcompiler/sun.py +0 -52
  589. numpy-1.9.3/numpy/distutils/intelccompiler.py +0 -45
  590. numpy-1.9.3/numpy/distutils/lib2def.py +0 -116
  591. numpy-1.9.3/numpy/distutils/mingw32ccompiler.py +0 -582
  592. numpy-1.9.3/numpy/distutils/misc_util.py +0 -2271
  593. numpy-1.9.3/numpy/distutils/npy_pkg_config.py +0 -464
  594. numpy-1.9.3/numpy/distutils/system_info.py +0 -2319
  595. numpy-1.9.3/numpy/distutils/tests/f2py_ext/tests/test_fib2.py +0 -13
  596. numpy-1.9.3/numpy/distutils/tests/f2py_f90_ext/tests/test_foo.py +0 -12
  597. numpy-1.9.3/numpy/distutils/tests/gen_ext/tests/test_fib3.py +0 -12
  598. numpy-1.9.3/numpy/distutils/tests/pyrex_ext/tests/test_primes.py +0 -14
  599. numpy-1.9.3/numpy/distutils/tests/swig_ext/tests/test_example.py +0 -18
  600. numpy-1.9.3/numpy/distutils/tests/swig_ext/tests/test_example2.py +0 -16
  601. numpy-1.9.3/numpy/distutils/tests/test_fcompiler_gnu.py +0 -53
  602. numpy-1.9.3/numpy/distutils/tests/test_fcompiler_intel.py +0 -36
  603. numpy-1.9.3/numpy/distutils/tests/test_misc_util.py +0 -75
  604. numpy-1.9.3/numpy/distutils/tests/test_npy_pkg_config.py +0 -98
  605. numpy-1.9.3/numpy/distutils/unixccompiler.py +0 -113
  606. numpy-1.9.3/numpy/doc/byteswapping.py +0 -147
  607. numpy-1.9.3/numpy/doc/creation.py +0 -144
  608. numpy-1.9.3/numpy/doc/glossary.py +0 -418
  609. numpy-1.9.3/numpy/doc/indexing.py +0 -437
  610. numpy-1.9.3/numpy/doc/structured_arrays.py +0 -223
  611. numpy-1.9.3/numpy/f2py/__init__.py +0 -49
  612. numpy-1.9.3/numpy/f2py/auxfuncs.py +0 -711
  613. numpy-1.9.3/numpy/f2py/capi_maps.py +0 -773
  614. numpy-1.9.3/numpy/f2py/cb_rules.py +0 -539
  615. numpy-1.9.3/numpy/f2py/cfuncs.py +0 -1224
  616. numpy-1.9.3/numpy/f2py/common_rules.py +0 -132
  617. numpy-1.9.3/numpy/f2py/crackfortran.py +0 -2870
  618. numpy-1.9.3/numpy/f2py/diagnose.py +0 -149
  619. numpy-1.9.3/numpy/f2py/f2py2e.py +0 -598
  620. numpy-1.9.3/numpy/f2py/f2py_testing.py +0 -46
  621. numpy-1.9.3/numpy/f2py/f90mod_rules.py +0 -246
  622. numpy-1.9.3/numpy/f2py/func2subr.py +0 -291
  623. numpy-1.9.3/numpy/f2py/rules.py +0 -1448
  624. numpy-1.9.3/numpy/f2py/setup.py +0 -129
  625. numpy-1.9.3/numpy/f2py/src/fortranobject.c +0 -972
  626. numpy-1.9.3/numpy/f2py/src/fortranobject.h +0 -162
  627. numpy-1.9.3/numpy/f2py/tests/src/array_from_pyobj/wrapmodule.c +0 -223
  628. numpy-1.9.3/numpy/f2py/tests/test_array_from_pyobj.py +0 -559
  629. numpy-1.9.3/numpy/f2py/tests/test_assumed_shape.py +0 -37
  630. numpy-1.9.3/numpy/f2py/tests/test_callback.py +0 -132
  631. numpy-1.9.3/numpy/f2py/tests/test_kind.py +0 -36
  632. numpy-1.9.3/numpy/f2py/tests/test_mixed.py +0 -41
  633. numpy-1.9.3/numpy/f2py/tests/test_regression.py +0 -32
  634. numpy-1.9.3/numpy/f2py/tests/test_return_character.py +0 -142
  635. numpy-1.9.3/numpy/f2py/tests/test_return_complex.py +0 -169
  636. numpy-1.9.3/numpy/f2py/tests/test_return_integer.py +0 -178
  637. numpy-1.9.3/numpy/f2py/tests/test_return_logical.py +0 -187
  638. numpy-1.9.3/numpy/f2py/tests/test_return_real.py +0 -203
  639. numpy-1.9.3/numpy/f2py/tests/test_size.py +0 -47
  640. numpy-1.9.3/numpy/f2py/tests/util.py +0 -353
  641. numpy-1.9.3/numpy/f2py/use_rules.py +0 -109
  642. numpy-1.9.3/numpy/fft/fftpack.c +0 -1501
  643. numpy-1.9.3/numpy/fft/fftpack.h +0 -28
  644. numpy-1.9.3/numpy/fft/fftpack.py +0 -1169
  645. numpy-1.9.3/numpy/fft/fftpack_litemodule.c +0 -371
  646. numpy-1.9.3/numpy/fft/info.py +0 -179
  647. numpy-1.9.3/numpy/fft/setup.py +0 -20
  648. numpy-1.9.3/numpy/fft/tests/test_fftpack.py +0 -75
  649. numpy-1.9.3/numpy/fft/tests/test_helper.py +0 -78
  650. numpy-1.9.3/numpy/lib/_iotools.py +0 -891
  651. numpy-1.9.3/numpy/lib/arraypad.py +0 -1475
  652. numpy-1.9.3/numpy/lib/arraysetops.py +0 -464
  653. numpy-1.9.3/numpy/lib/arrayterator.py +0 -226
  654. numpy-1.9.3/numpy/lib/financial.py +0 -737
  655. numpy-1.9.3/numpy/lib/format.py +0 -771
  656. numpy-1.9.3/numpy/lib/function_base.py +0 -3884
  657. numpy-1.9.3/numpy/lib/index_tricks.py +0 -869
  658. numpy-1.9.3/numpy/lib/info.py +0 -151
  659. numpy-1.9.3/numpy/lib/nanfunctions.py +0 -1158
  660. numpy-1.9.3/numpy/lib/npyio.py +0 -1871
  661. numpy-1.9.3/numpy/lib/polynomial.py +0 -1271
  662. numpy-1.9.3/numpy/lib/recfunctions.py +0 -1003
  663. numpy-1.9.3/numpy/lib/setup.py +0 -23
  664. numpy-1.9.3/numpy/lib/shape_base.py +0 -865
  665. numpy-1.9.3/numpy/lib/src/_compiled_base.c +0 -1761
  666. numpy-1.9.3/numpy/lib/stride_tricks.py +0 -123
  667. numpy-1.9.3/numpy/lib/tests/test__iotools.py +0 -326
  668. numpy-1.9.3/numpy/lib/tests/test__version.py +0 -57
  669. numpy-1.9.3/numpy/lib/tests/test_arraypad.py +0 -560
  670. numpy-1.9.3/numpy/lib/tests/test_arraysetops.py +0 -301
  671. numpy-1.9.3/numpy/lib/tests/test_financial.py +0 -160
  672. numpy-1.9.3/numpy/lib/tests/test_format.py +0 -716
  673. numpy-1.9.3/numpy/lib/tests/test_function_base.py +0 -2145
  674. numpy-1.9.3/numpy/lib/tests/test_index_tricks.py +0 -289
  675. numpy-1.9.3/numpy/lib/tests/test_io.py +0 -1754
  676. numpy-1.9.3/numpy/lib/tests/test_nanfunctions.py +0 -774
  677. numpy-1.9.3/numpy/lib/tests/test_polynomial.py +0 -177
  678. numpy-1.9.3/numpy/lib/tests/test_recfunctions.py +0 -705
  679. numpy-1.9.3/numpy/lib/tests/test_shape_base.py +0 -368
  680. numpy-1.9.3/numpy/lib/tests/test_stride_tricks.py +0 -238
  681. numpy-1.9.3/numpy/lib/tests/test_twodim_base.py +0 -504
  682. numpy-1.9.3/numpy/lib/tests/test_type_check.py +0 -328
  683. numpy-1.9.3/numpy/lib/twodim_base.py +0 -1003
  684. numpy-1.9.3/numpy/lib/type_check.py +0 -605
  685. numpy-1.9.3/numpy/lib/utils.py +0 -1176
  686. numpy-1.9.3/numpy/linalg/lapack_lite/python_xerbla.c +0 -47
  687. numpy-1.9.3/numpy/linalg/lapack_litemodule.c +0 -362
  688. numpy-1.9.3/numpy/linalg/linalg.py +0 -2136
  689. numpy-1.9.3/numpy/linalg/tests/test_build.py +0 -53
  690. numpy-1.9.3/numpy/linalg/tests/test_linalg.py +0 -1156
  691. numpy-1.9.3/numpy/linalg/tests/test_regression.py +0 -90
  692. numpy-1.9.3/numpy/linalg/umath_linalg.c.src +0 -3210
  693. numpy-1.9.3/numpy/ma/__init__.py +0 -58
  694. numpy-1.9.3/numpy/ma/bench.py +0 -166
  695. numpy-1.9.3/numpy/ma/core.py +0 -7374
  696. numpy-1.9.3/numpy/ma/extras.py +0 -1932
  697. numpy-1.9.3/numpy/ma/mrecords.py +0 -734
  698. numpy-1.9.3/numpy/ma/setup.py +0 -20
  699. numpy-1.9.3/numpy/ma/tests/test_core.py +0 -3706
  700. numpy-1.9.3/numpy/ma/tests/test_extras.py +0 -954
  701. numpy-1.9.3/numpy/ma/tests/test_mrecords.py +0 -521
  702. numpy-1.9.3/numpy/ma/tests/test_old_ma.py +0 -869
  703. numpy-1.9.3/numpy/ma/tests/test_regression.py +0 -75
  704. numpy-1.9.3/numpy/ma/tests/test_subclassing.py +0 -236
  705. numpy-1.9.3/numpy/ma/testutils.py +0 -240
  706. numpy-1.9.3/numpy/ma/timer_comparison.py +0 -459
  707. numpy-1.9.3/numpy/matlib.py +0 -358
  708. numpy-1.9.3/numpy/matrixlib/defmatrix.py +0 -1094
  709. numpy-1.9.3/numpy/matrixlib/tests/test_defmatrix.py +0 -400
  710. numpy-1.9.3/numpy/matrixlib/tests/test_multiarray.py +0 -18
  711. numpy-1.9.3/numpy/matrixlib/tests/test_numeric.py +0 -10
  712. numpy-1.9.3/numpy/matrixlib/tests/test_regression.py +0 -34
  713. numpy-1.9.3/numpy/polynomial/_polybase.py +0 -962
  714. numpy-1.9.3/numpy/polynomial/chebyshev.py +0 -2056
  715. numpy-1.9.3/numpy/polynomial/hermite.py +0 -1789
  716. numpy-1.9.3/numpy/polynomial/hermite_e.py +0 -1786
  717. numpy-1.9.3/numpy/polynomial/laguerre.py +0 -1781
  718. numpy-1.9.3/numpy/polynomial/legendre.py +0 -1809
  719. numpy-1.9.3/numpy/polynomial/polytemplate.py +0 -927
  720. numpy-1.9.3/numpy/polynomial/polyutils.py +0 -403
  721. numpy-1.9.3/numpy/random/mtrand/distributions.c +0 -892
  722. numpy-1.9.3/numpy/random/mtrand/mtrand.c +0 -36656
  723. numpy-1.9.3/numpy/random/mtrand/mtrand.pyx +0 -4706
  724. numpy-1.9.3/numpy/random/setup.py +0 -74
  725. numpy-1.9.3/numpy/random/tests/test_random.py +0 -707
  726. numpy-1.9.3/numpy/random/tests/test_regression.py +0 -86
  727. numpy-1.9.3/numpy/setup.py +0 -27
  728. numpy-1.9.3/numpy/testing/__init__.py +0 -16
  729. numpy-1.9.3/numpy/testing/decorators.py +0 -271
  730. numpy-1.9.3/numpy/testing/noseclasses.py +0 -353
  731. numpy-1.9.3/numpy/testing/nosetester.py +0 -504
  732. numpy-1.9.3/numpy/testing/print_coercion_tables.py +0 -89
  733. numpy-1.9.3/numpy/testing/setup.py +0 -20
  734. numpy-1.9.3/numpy/testing/tests/test_decorators.py +0 -185
  735. numpy-1.9.3/numpy/testing/tests/test_utils.py +0 -558
  736. numpy-1.9.3/numpy/testing/utils.py +0 -1715
  737. numpy-1.9.3/numpy/tests/test_ctypeslib.py +0 -102
  738. numpy-1.9.3/numpy/tests/test_matlib.py +0 -55
  739. numpy-1.9.3/numpy/version.py +0 -10
  740. numpy-1.9.3/setup.py +0 -251
  741. numpy-1.9.3/site.cfg.example +0 -157
  742. numpy-1.9.3/tools/swig/README +0 -135
  743. numpy-1.9.3/tools/swig/numpy.i +0 -3085
  744. numpy-1.9.3/tools/swig/test/Array.i +0 -102
  745. numpy-1.9.3/tools/swig/test/Makefile +0 -34
  746. numpy-1.9.3/tools/swig/test/setup.py +0 -64
  747. numpy-1.9.3/tools/swig/test/testArray.py +0 -284
  748. numpy-1.9.3/tools/swig/test/testFarray.py +0 -159
  749. numpy-1.9.3/tools/swig/test/testFortran.py +0 -173
  750. numpy-1.9.3/tools/swig/test/testMatrix.py +0 -362
  751. numpy-1.9.3/tools/swig/test/testSuperTensor.py +0 -388
  752. numpy-1.9.3/tools/swig/test/testTensor.py +0 -402
  753. numpy-1.9.3/tools/swig/test/testVector.py +0 -381
  754. {numpy-1.9.3 → numpy-1.10.0.post2}/BENTO_BUILD.txt +0 -0
  755. {numpy-1.9.3 → numpy-1.10.0.post2}/COMPATIBILITY +0 -0
  756. {numpy-1.9.3 → numpy-1.10.0.post2}/DEV_README.txt +0 -0
  757. {numpy-1.9.3 → numpy-1.10.0.post2}/README.txt +0 -0
  758. {numpy-1.9.3 → numpy-1.10.0.post2}/THANKS.txt +0 -0
  759. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/Makefile +0 -0
  760. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/BUGS.txt +0 -0
  761. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/FAQ.txt +0 -0
  762. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/HISTORY.txt +0 -0
  763. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/Makefile +0 -0
  764. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/OLDNEWS.txt +0 -0
  765. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/README.txt +0 -0
  766. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/Release-1.x.txt +0 -0
  767. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/Release-2.x.txt +0 -0
  768. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/Release-3.x.txt +0 -0
  769. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/Release-4.x.txt +0 -0
  770. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/TESTING.txt +0 -0
  771. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/THANKS.txt +0 -0
  772. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/TODO.txt +0 -0
  773. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/apps.tex +0 -0
  774. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/bugs.tex +0 -0
  775. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/collectinput.py +0 -0
  776. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/commands.tex +0 -0
  777. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/default.css +0 -0
  778. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/docutils.conf +0 -0
  779. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/ex1/arr.f +0 -0
  780. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/ex1/bar.f +0 -0
  781. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/ex1/foo.f +0 -0
  782. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/ex1/foobar-smart.f90 +0 -0
  783. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/ex1/foobar.f90 +0 -0
  784. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/ex1/foobarmodule.tex +0 -0
  785. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/ex1/runme +0 -0
  786. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/f2py.1 +0 -0
  787. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/f2py2e.tex +0 -0
  788. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/README.txt +0 -0
  789. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/aerostructure.jpg +0 -0
  790. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/flow.jpg +0 -0
  791. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/mk_html.sh +0 -0
  792. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/mk_pdf.sh +0 -0
  793. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/mk_ps.sh +0 -0
  794. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/src/examples/exp1.f +0 -0
  795. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/src/examples/exp1mess.txt +0 -0
  796. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/src/examples/exp1session.txt +0 -0
  797. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/src/examples/foo.pyf +0 -0
  798. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/src/examples/foom.pyf +0 -0
  799. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/structure.jpg +0 -0
  800. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/fortranobject.tex +0 -0
  801. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/hello.f +0 -0
  802. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/index.html +0 -0
  803. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/intro.tex +0 -0
  804. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/multiarray/array_from_pyobj.c +0 -0
  805. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/multiarray/bar.c +0 -0
  806. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/multiarray/foo.f +0 -0
  807. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/multiarray/fortran_array_from_pyobj.txt +0 -0
  808. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/multiarray/fun.pyf +0 -0
  809. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/multiarray/run.pyf +0 -0
  810. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/multiarray/transpose.txt +0 -0
  811. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/multiarrays.txt +0 -0
  812. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/notes.tex +0 -0
  813. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/oldnews.html +0 -0
  814. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/options.tex +0 -0
  815. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/pyforttest.pyf +0 -0
  816. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/pytest.py +0 -0
  817. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/python9.tex +0 -0
  818. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/signaturefile.tex +0 -0
  819. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/simple.f +0 -0
  820. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/simple_session.dat +0 -0
  821. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/using_F_compiler.txt +0 -0
  822. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/f2py/win32_notes.txt +0 -0
  823. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/postprocess.py +0 -0
  824. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/release/1.3.0-notes.rst +0 -0
  825. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/release/1.4.0-notes.rst +0 -0
  826. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/release/1.5.0-notes.rst +0 -0
  827. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/release/1.6.0-notes.rst +0 -0
  828. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/release/1.6.1-notes.rst +0 -0
  829. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/release/1.6.2-notes.rst +0 -0
  830. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/release/1.7.0-notes.rst +0 -0
  831. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/release/1.7.1-notes.rst +0 -0
  832. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/release/1.7.2-notes.rst +0 -0
  833. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/release/1.8.0-notes.rst +0 -0
  834. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/release/1.8.1-notes.rst +0 -0
  835. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/release/1.8.2-notes.rst +0 -0
  836. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/release/1.9.0-notes.rst +0 -0
  837. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/release/1.9.1-notes.rst +0 -0
  838. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/release/1.9.2-notes.rst +0 -0
  839. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/release/time_based_proposal.rst +0 -0
  840. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/.git +0 -0
  841. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/.gitignore +0 -0
  842. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/Makefile +0 -0
  843. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/README.rst +0 -0
  844. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_static/scipyshiny_small.png +0 -0
  845. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/layout.html +0 -0
  846. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/searchbox.html +0 -0
  847. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/sourcelink.html +0 -0
  848. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/css/extend.css +0 -0
  849. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/css/pygments.css +0 -0
  850. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/css/scipy-central.css +0 -0
  851. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/css/spc-bootstrap.css +0 -0
  852. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/css/spc-extend.css +0 -0
  853. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/all-icons.svg +0 -0
  854. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/contents.png +0 -0
  855. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/create-new-account-icon.png +0 -0
  856. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/external-link-icon-shrunk.png +0 -0
  857. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/external-link-icon.png +0 -0
  858. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/external-link-icon.svg +0 -0
  859. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/external-link-list-icon-tiniest.png +0 -0
  860. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/external-link-list-icon-tiny.png +0 -0
  861. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/external-link-list-icon.png +0 -0
  862. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ad.png +0 -0
  863. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ae.png +0 -0
  864. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-af.png +0 -0
  865. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ag.png +0 -0
  866. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ai.png +0 -0
  867. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-al.png +0 -0
  868. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-am.png +0 -0
  869. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ao.png +0 -0
  870. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-aq.png +0 -0
  871. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ar.png +0 -0
  872. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-as.png +0 -0
  873. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-at.png +0 -0
  874. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-au.png +0 -0
  875. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-aw.png +0 -0
  876. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-az.png +0 -0
  877. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ba.png +0 -0
  878. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bb.png +0 -0
  879. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bd.png +0 -0
  880. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-be.png +0 -0
  881. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bf.png +0 -0
  882. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bg.png +0 -0
  883. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bh.png +0 -0
  884. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bi.png +0 -0
  885. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bj.png +0 -0
  886. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bl.png +0 -0
  887. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bm.png +0 -0
  888. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bn.png +0 -0
  889. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bo.png +0 -0
  890. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-br.png +0 -0
  891. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bs.png +0 -0
  892. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bt.png +0 -0
  893. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bw.png +0 -0
  894. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-by.png +0 -0
  895. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bz.png +0 -0
  896. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ca.png +0 -0
  897. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cc.png +0 -0
  898. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cd.png +0 -0
  899. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cf.png +0 -0
  900. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cg.png +0 -0
  901. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ch.png +0 -0
  902. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ci.png +0 -0
  903. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ck.png +0 -0
  904. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cl.png +0 -0
  905. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cm.png +0 -0
  906. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cn.png +0 -0
  907. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-co.png +0 -0
  908. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cr.png +0 -0
  909. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cu.png +0 -0
  910. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cv.png +0 -0
  911. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cw.png +0 -0
  912. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cx.png +0 -0
  913. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cy.png +0 -0
  914. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cz.png +0 -0
  915. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-de.png +0 -0
  916. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-dj.png +0 -0
  917. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-dk.png +0 -0
  918. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-dm.png +0 -0
  919. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-do.png +0 -0
  920. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-dz.png +0 -0
  921. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ec.png +0 -0
  922. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ee.png +0 -0
  923. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-eg.png +0 -0
  924. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-er.png +0 -0
  925. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-es.png +0 -0
  926. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-et.png +0 -0
  927. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-fi.png +0 -0
  928. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-fj.png +0 -0
  929. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-fk.png +0 -0
  930. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-fm.png +0 -0
  931. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-fo.png +0 -0
  932. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-fr.png +0 -0
  933. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ga.png +0 -0
  934. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gb.png +0 -0
  935. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gd.png +0 -0
  936. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ge.png +0 -0
  937. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gf.png +0 -0
  938. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gg.png +0 -0
  939. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gh.png +0 -0
  940. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gi.png +0 -0
  941. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gl.png +0 -0
  942. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gm.png +0 -0
  943. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gn.png +0 -0
  944. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gq.png +0 -0
  945. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gr.png +0 -0
  946. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gs.png +0 -0
  947. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gt.png +0 -0
  948. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gu.png +0 -0
  949. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gw.png +0 -0
  950. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gy.png +0 -0
  951. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-hk.png +0 -0
  952. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-hm.png +0 -0
  953. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-hn.png +0 -0
  954. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-hr.png +0 -0
  955. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ht.png +0 -0
  956. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-hu.png +0 -0
  957. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-id.png +0 -0
  958. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ie.png +0 -0
  959. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-il.png +0 -0
  960. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-im.png +0 -0
  961. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-in.png +0 -0
  962. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-io.png +0 -0
  963. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-iq.png +0 -0
  964. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ir.png +0 -0
  965. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-is.png +0 -0
  966. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-it.png +0 -0
  967. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-je.png +0 -0
  968. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-jm.png +0 -0
  969. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-jo.png +0 -0
  970. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-jp.png +0 -0
  971. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ke.png +0 -0
  972. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-kg.png +0 -0
  973. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-kh.png +0 -0
  974. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ki.png +0 -0
  975. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-km.png +0 -0
  976. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-kn.png +0 -0
  977. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-kp.png +0 -0
  978. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-kr.png +0 -0
  979. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-kw.png +0 -0
  980. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ky.png +0 -0
  981. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-kz.png +0 -0
  982. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-la.png +0 -0
  983. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-lb.png +0 -0
  984. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-lc.png +0 -0
  985. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-li.png +0 -0
  986. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-lk.png +0 -0
  987. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-lr.png +0 -0
  988. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ls.png +0 -0
  989. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-lt.png +0 -0
  990. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-lu.png +0 -0
  991. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-lv.png +0 -0
  992. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ly.png +0 -0
  993. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ma.png +0 -0
  994. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mc.png +0 -0
  995. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-md.png +0 -0
  996. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-me.png +0 -0
  997. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mf.png +0 -0
  998. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mg.png +0 -0
  999. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mh.png +0 -0
  1000. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mk.png +0 -0
  1001. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ml.png +0 -0
  1002. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mm.png +0 -0
  1003. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mn.png +0 -0
  1004. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mo.png +0 -0
  1005. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mp.png +0 -0
  1006. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mq.png +0 -0
  1007. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mr.png +0 -0
  1008. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ms.png +0 -0
  1009. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mt.png +0 -0
  1010. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mu.png +0 -0
  1011. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mv.png +0 -0
  1012. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mw.png +0 -0
  1013. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mx.png +0 -0
  1014. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-my.png +0 -0
  1015. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mz.png +0 -0
  1016. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-na.png +0 -0
  1017. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-nc.png +0 -0
  1018. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ne.png +0 -0
  1019. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-nf.png +0 -0
  1020. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ng.png +0 -0
  1021. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ni.png +0 -0
  1022. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-nl.png +0 -0
  1023. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-no.png +0 -0
  1024. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-np.png +0 -0
  1025. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-nr.png +0 -0
  1026. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-nu.png +0 -0
  1027. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-nz.png +0 -0
  1028. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-om.png +0 -0
  1029. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pa.png +0 -0
  1030. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pe.png +0 -0
  1031. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pf.png +0 -0
  1032. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pg.png +0 -0
  1033. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ph.png +0 -0
  1034. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pk.png +0 -0
  1035. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pl.png +0 -0
  1036. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pm.png +0 -0
  1037. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pn.png +0 -0
  1038. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pr.png +0 -0
  1039. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ps.png +0 -0
  1040. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pt.png +0 -0
  1041. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pw.png +0 -0
  1042. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-py.png +0 -0
  1043. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-qa.png +0 -0
  1044. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-re.png +0 -0
  1045. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ro.png +0 -0
  1046. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-rs.png +0 -0
  1047. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ru.png +0 -0
  1048. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-rw.png +0 -0
  1049. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sa.png +0 -0
  1050. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sb.png +0 -0
  1051. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sc.png +0 -0
  1052. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sd.png +0 -0
  1053. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-se.png +0 -0
  1054. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sg.png +0 -0
  1055. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sh.png +0 -0
  1056. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-si.png +0 -0
  1057. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sj.png +0 -0
  1058. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sk.png +0 -0
  1059. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sl.png +0 -0
  1060. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sm.png +0 -0
  1061. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sn.png +0 -0
  1062. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-so.png +0 -0
  1063. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sr.png +0 -0
  1064. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-st.png +0 -0
  1065. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sv.png +0 -0
  1066. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sy.png +0 -0
  1067. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sz.png +0 -0
  1068. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tc.png +0 -0
  1069. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-td.png +0 -0
  1070. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tf.png +0 -0
  1071. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tg.png +0 -0
  1072. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-th.png +0 -0
  1073. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tj.png +0 -0
  1074. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tk.png +0 -0
  1075. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tl.png +0 -0
  1076. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tm.png +0 -0
  1077. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tn.png +0 -0
  1078. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-to.png +0 -0
  1079. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tr.png +0 -0
  1080. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tt.png +0 -0
  1081. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tv.png +0 -0
  1082. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tw.png +0 -0
  1083. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tz.png +0 -0
  1084. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ua.png +0 -0
  1085. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ug.png +0 -0
  1086. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-um.png +0 -0
  1087. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-us.png +0 -0
  1088. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-uy.png +0 -0
  1089. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-uz.png +0 -0
  1090. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-va.png +0 -0
  1091. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-vc.png +0 -0
  1092. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ve.png +0 -0
  1093. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-vg.png +0 -0
  1094. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-vi.png +0 -0
  1095. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-vn.png +0 -0
  1096. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-vu.png +0 -0
  1097. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-wf.png +0 -0
  1098. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ws.png +0 -0
  1099. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ye.png +0 -0
  1100. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-za.png +0 -0
  1101. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-zm.png +0 -0
  1102. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-zw.png +0 -0
  1103. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/glyphicons-halflings-white.png +0 -0
  1104. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/glyphicons-halflings.png +0 -0
  1105. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/important-icon.png +0 -0
  1106. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/information-icon.png +0 -0
  1107. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/internet-web-browser.png +0 -0
  1108. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/multiple-file-icon-shrunk.png +0 -0
  1109. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/multiple-file-icon.png +0 -0
  1110. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/multiple-file-icon.svg +0 -0
  1111. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/multiple-file-list-icon-tiny.png +0 -0
  1112. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/multiple-file-list-icon.png +0 -0
  1113. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/navigation.png +0 -0
  1114. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/person-list-icon-tiny.png +0 -0
  1115. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/person-list-icon.png +0 -0
  1116. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/scipy-logo.png +0 -0
  1117. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/scipy_org_logo.gif +0 -0
  1118. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/scipycentral_logo.png +0 -0
  1119. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/scipyshiny_small.png +0 -0
  1120. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/send-email-icon.png +0 -0
  1121. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/single-file-icon-shrunk.png +0 -0
  1122. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/single-file-icon.png +0 -0
  1123. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/single-file-icon.svg +0 -0
  1124. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/single-file-list-icon-tiniest.png +0 -0
  1125. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/single-file-list-icon-tiny.png +0 -0
  1126. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/single-file-list-icon.png +0 -0
  1127. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/transparent-pixel.gif +0 -0
  1128. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/ui-anim_basic_16x16.gif +0 -0
  1129. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/js/copybutton.js +0 -0
  1130. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/accordion.less +0 -0
  1131. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/alerts.less +0 -0
  1132. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/bootstrap.less +0 -0
  1133. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/breadcrumbs.less +0 -0
  1134. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/button-groups.less +0 -0
  1135. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/buttons.less +0 -0
  1136. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/carousel.less +0 -0
  1137. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/close.less +0 -0
  1138. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/code.less +0 -0
  1139. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/component-animations.less +0 -0
  1140. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/dropdowns.less +0 -0
  1141. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/forms.less +0 -0
  1142. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/grid.less +0 -0
  1143. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/hero-unit.less +0 -0
  1144. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/labels-badges.less +0 -0
  1145. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/layouts.less +0 -0
  1146. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/media.less +0 -0
  1147. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/mixins.less +0 -0
  1148. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/modals.less +0 -0
  1149. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/navbar.less +0 -0
  1150. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/navs.less +0 -0
  1151. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/pager.less +0 -0
  1152. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/pagination.less +0 -0
  1153. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/popovers.less +0 -0
  1154. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/progress-bars.less +0 -0
  1155. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/reset.less +0 -0
  1156. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/responsive-1200px-min.less +0 -0
  1157. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/responsive-767px-max.less +0 -0
  1158. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/responsive-768px-979px.less +0 -0
  1159. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/responsive-navbar.less +0 -0
  1160. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/responsive-utilities.less +0 -0
  1161. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/responsive.less +0 -0
  1162. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/scaffolding.less +0 -0
  1163. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/sprites.less +0 -0
  1164. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/tables.less +0 -0
  1165. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/thumbnails.less +0 -0
  1166. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/tooltip.less +0 -0
  1167. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/type.less +0 -0
  1168. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/utilities.less +0 -0
  1169. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/variables.less +0 -0
  1170. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/wells.less +0 -0
  1171. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/spc-bootstrap.less +0 -0
  1172. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/spc-content.less +0 -0
  1173. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/spc-extend.less +0 -0
  1174. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/spc-footer.less +0 -0
  1175. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/spc-header.less +0 -0
  1176. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/spc-rightsidebar.less +0 -0
  1177. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/spc-utils.less +0 -0
  1178. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/scipy.css_t +0 -0
  1179. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/theme.conf +0 -0
  1180. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/conf.py +0 -0
  1181. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/index.rst +0 -0
  1182. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/test_autodoc.rst +0 -0
  1183. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/test_autodoc_2.rst +0 -0
  1184. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/test_autodoc_3.rst +0 -0
  1185. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/test_autodoc_4.rst +0 -0
  1186. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/test_optimize.rst +0 -0
  1187. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/_templates/autosummary/class.rst +0 -0
  1188. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/_templates/indexcontent.html +0 -0
  1189. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/_templates/indexsidebar.html +0 -0
  1190. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/_templates/layout.html +0 -0
  1191. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/about.rst +0 -0
  1192. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/bugs.rst +0 -0
  1193. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/contents.rst +0 -0
  1194. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/dev/gitwash/configure_git.rst +0 -0
  1195. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/dev/gitwash/development_setup.rst +0 -0
  1196. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/dev/gitwash/dot2_dot3.rst +0 -0
  1197. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/dev/gitwash/following_latest.rst +0 -0
  1198. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/dev/gitwash/forking_button.png +0 -0
  1199. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/dev/gitwash/git_development.rst +0 -0
  1200. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/dev/gitwash/git_intro.rst +0 -0
  1201. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/dev/gitwash/git_resources.rst +0 -0
  1202. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/dev/gitwash/pull_button.png +0 -0
  1203. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/dev/gitwash_links.txt +0 -0
  1204. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/advanced.rst +0 -0
  1205. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/allocarr.f90 +0 -0
  1206. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/allocarr_session.dat +0 -0
  1207. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/array.f +0 -0
  1208. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/array_session.dat +0 -0
  1209. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/calculate.f +0 -0
  1210. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/calculate_session.dat +0 -0
  1211. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/callback.f +0 -0
  1212. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/callback2.pyf +0 -0
  1213. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/callback_session.dat +0 -0
  1214. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/common.f +0 -0
  1215. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/common_session.dat +0 -0
  1216. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/compile_session.dat +0 -0
  1217. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/distutils.rst +0 -0
  1218. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/extcallback.f +0 -0
  1219. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/extcallback_session.dat +0 -0
  1220. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/fib1.f +0 -0
  1221. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/fib1.pyf +0 -0
  1222. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/fib2.pyf +0 -0
  1223. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/fib3.f +0 -0
  1224. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/ftype.f +0 -0
  1225. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/ftype_session.dat +0 -0
  1226. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/getting-started.rst +0 -0
  1227. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/index.rst +0 -0
  1228. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/moddata.f90 +0 -0
  1229. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/moddata_session.dat +0 -0
  1230. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/python-usage.rst +0 -0
  1231. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/run_main_session.dat +0 -0
  1232. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/scalar.f +0 -0
  1233. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/scalar_session.dat +0 -0
  1234. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/setup_example.py +0 -0
  1235. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/signature-file.rst +0 -0
  1236. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/spam.pyf +0 -0
  1237. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/spam_session.dat +0 -0
  1238. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/string.f +0 -0
  1239. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/string_session.dat +0 -0
  1240. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/usage.rst +0 -0
  1241. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/var.pyf +0 -0
  1242. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/f2py/var_session.dat +0 -0
  1243. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/glossary.rst +0 -0
  1244. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/license.rst +0 -0
  1245. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/neps/datetime-proposal.rst +0 -0
  1246. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/neps/datetime-proposal3.rst +0 -0
  1247. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/neps/deferred-ufunc-evaluation.rst +0 -0
  1248. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/neps/generalized-ufuncs.rst +0 -0
  1249. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/neps/groupby_additions.rst +0 -0
  1250. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/neps/index.rst +0 -0
  1251. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/neps/math_config_clean.rst +0 -0
  1252. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/neps/missing-data.rst +0 -0
  1253. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/neps/new-iterator-ufunc.rst +0 -0
  1254. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/neps/newbugtracker.rst +0 -0
  1255. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/neps/npy-format.rst +0 -0
  1256. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/neps/structured_array_extensions.rst +0 -0
  1257. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/neps/ufunc-overrides.rst +0 -0
  1258. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/neps/warnfix.rst +0 -0
  1259. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/arrays.datetime.rst +0 -0
  1260. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/arrays.nditer.rst +0 -0
  1261. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/arrays.rst +0 -0
  1262. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/c-api.deprecations.rst +0 -0
  1263. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/c-api.rst +0 -0
  1264. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/distutils.rst +0 -0
  1265. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/figures/dtype-hierarchy.dia +0 -0
  1266. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/figures/dtype-hierarchy.pdf +0 -0
  1267. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/figures/dtype-hierarchy.png +0 -0
  1268. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/figures/threefundamental.fig +0 -0
  1269. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/figures/threefundamental.pdf +0 -0
  1270. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/figures/threefundamental.png +0 -0
  1271. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/internals.rst +0 -0
  1272. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/maskedarray.baseclass.rst +0 -0
  1273. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/maskedarray.generic.rst +0 -0
  1274. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/maskedarray.rst +0 -0
  1275. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.array-creation.rst +0 -0
  1276. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.bitwise.rst +0 -0
  1277. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.char.rst +0 -0
  1278. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.ctypeslib.rst +0 -0
  1279. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.datetime.rst +0 -0
  1280. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.dtype.rst +0 -0
  1281. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.dual.rst +0 -0
  1282. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.emath.rst +0 -0
  1283. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.err.rst +0 -0
  1284. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.fft.rst +0 -0
  1285. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.financial.rst +0 -0
  1286. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.functional.rst +0 -0
  1287. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.help.rst +0 -0
  1288. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.indexing.rst +0 -0
  1289. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.logic.rst +0 -0
  1290. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.math.rst +0 -0
  1291. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.matlib.rst +0 -0
  1292. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.numarray.rst +0 -0
  1293. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.oldnumeric.rst +0 -0
  1294. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.other.rst +0 -0
  1295. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.padding.rst +0 -0
  1296. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.chebyshev.rst +0 -0
  1297. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.classes.rst +0 -0
  1298. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.hermite.rst +0 -0
  1299. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.hermite_e.rst +0 -0
  1300. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.laguerre.rst +0 -0
  1301. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.legendre.rst +0 -0
  1302. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.package.rst +0 -0
  1303. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.poly1d.rst +0 -0
  1304. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.polynomial.rst +0 -0
  1305. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.rst +0 -0
  1306. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.random.rst +0 -0
  1307. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.rst +0 -0
  1308. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.set.rst +0 -0
  1309. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.testing.rst +0 -0
  1310. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/routines.window.rst +0 -0
  1311. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/reference/swig.rst +0 -0
  1312. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/user/basics.broadcasting.rst +0 -0
  1313. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/user/basics.byteswapping.rst +0 -0
  1314. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/user/basics.creation.rst +0 -0
  1315. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/user/basics.indexing.rst +0 -0
  1316. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/user/basics.io.rst +0 -0
  1317. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/user/basics.rst +0 -0
  1318. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/user/basics.subclassing.rst +0 -0
  1319. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/user/basics.types.rst +0 -0
  1320. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/user/c-info.rst +0 -0
  1321. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/user/howtofind.rst +0 -0
  1322. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/user/index.rst +0 -0
  1323. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/user/introduction.rst +0 -0
  1324. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/user/misc.rst +0 -0
  1325. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/user/performance.rst +0 -0
  1326. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/source/user/whatisnumpy.rst +0 -0
  1327. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/.git +0 -0
  1328. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/.gitignore +0 -0
  1329. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/.travis.yml +0 -0
  1330. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/LICENSE.txt +0 -0
  1331. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/MANIFEST.in +0 -0
  1332. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/README.rst +0 -0
  1333. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/__init__.py +0 -0
  1334. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/comment_eater.py +0 -0
  1335. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/compiler_unparse.py +0 -0
  1336. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/docscrape.py +0 -0
  1337. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/docscrape_sphinx.py +0 -0
  1338. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/linkcode.py +0 -0
  1339. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/numpydoc.py +0 -0
  1340. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/phantom_import.py +0 -0
  1341. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/plot_directive.py +0 -0
  1342. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/tests/test_docscrape.py +0 -0
  1343. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/tests/test_linkcode.py +0 -0
  1344. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/tests/test_phantom_import.py +0 -0
  1345. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/tests/test_plot_directive.py +0 -0
  1346. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/tests/test_traitsdoc.py +0 -0
  1347. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/traitsdoc.py +0 -0
  1348. {numpy-1.9.3 → numpy-1.10.0.post2}/doc/sphinxext/setup.py +0 -0
  1349. {numpy-1.9.3/numpy/core/code_generators → numpy-1.10.0.post2/numpy/_build_utils}/__init__.py +0 -0
  1350. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/compat/__init__.py +0 -0
  1351. {numpy-1.9.3/numpy/distutils/tests/f2py_ext → numpy-1.10.0.post2/numpy/core/code_generators}/__init__.py +0 -0
  1352. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/code_generators/genapi.py +0 -0
  1353. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/code_generators/generate_numpy_api.py +0 -0
  1354. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/cversions.py +0 -0
  1355. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/include/numpy/_neighborhood_iterator_imp.h +0 -0
  1356. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/include/numpy/_numpyconfig.h.in +0 -0
  1357. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/include/numpy/arrayobject.h +0 -0
  1358. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/include/numpy/arrayscalars.h +0 -0
  1359. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/include/numpy/halffloat.h +0 -0
  1360. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/include/numpy/noprefix.h +0 -0
  1361. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/include/numpy/npy_1_7_deprecated_api.h +0 -0
  1362. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/include/numpy/npy_interrupt.h +0 -0
  1363. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/include/numpy/npy_no_deprecated_api.h +0 -0
  1364. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/include/numpy/npy_os.h +0 -0
  1365. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/include/numpy/old_defines.h +0 -0
  1366. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/include/numpy/oldnumeric.h +0 -0
  1367. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/include/numpy/ufuncobject.h +0 -0
  1368. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/include/numpy/utils.h +0 -0
  1369. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/info.py +0 -0
  1370. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/mlib.ini.in +0 -0
  1371. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/npymath.ini.in +0 -0
  1372. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/dummymodule.c +0 -0
  1373. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/_datetime.h +0 -0
  1374. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/alloc.h +0 -0
  1375. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/array_assign.c +0 -0
  1376. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/array_assign.h +0 -0
  1377. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/array_assign_array.c +0 -0
  1378. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/array_assign_scalar.c +0 -0
  1379. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/arrayobject.h +0 -0
  1380. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/buffer.h +0 -0
  1381. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/calculation.h +0 -0
  1382. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/conversion_utils.h +0 -0
  1383. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/convert.h +0 -0
  1384. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/convert_datatype.h +0 -0
  1385. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/ctors.h +0 -0
  1386. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/datetime_busday.h +0 -0
  1387. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/datetime_busdaycal.h +0 -0
  1388. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/datetime_strings.h +0 -0
  1389. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/descriptor.h +0 -0
  1390. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/flagsobject.c +0 -0
  1391. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/getset.h +0 -0
  1392. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/hashdescr.h +0 -0
  1393. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/item_selection.h +0 -0
  1394. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/iterators.h +0 -0
  1395. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/methods.h +0 -0
  1396. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/nditer_impl.h +0 -0
  1397. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/nditer_pywrap.h +0 -0
  1398. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/nditer_templ.c.src +0 -0
  1399. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/numpymemoryview.h +0 -0
  1400. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/numpyos.h +0 -0
  1401. {numpy-1.9.3/numpy/core/blasdot → numpy-1.10.0.post2/numpy/core/src/multiarray}/python_xerbla.c +0 -0
  1402. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/refcount.c +0 -0
  1403. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/refcount.h +0 -0
  1404. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/sequence.c +0 -0
  1405. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/sequence.h +0 -0
  1406. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/shape.h +0 -0
  1407. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/ucsnarrow.h +0 -0
  1408. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/usertypes.c +0 -0
  1409. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/multiarray/usertypes.h +0 -0
  1410. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/npymath/_signbit.c +0 -0
  1411. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/npymath/halffloat.c +0 -0
  1412. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/npymath/npy_math_common.h +0 -0
  1413. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/npysort/binsearch.c.src +0 -0
  1414. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/private/lowlevel_strided_loops.h +0 -0
  1415. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/private/npy_binsearch.h.src +0 -0
  1416. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/private/npy_fpmath.h +0 -0
  1417. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/private/npy_pycompat.h +0 -0
  1418. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/umath/reduction.c +0 -0
  1419. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/umath/reduction.h +0 -0
  1420. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/umath/struct_ufunc_test.c.src +0 -0
  1421. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/umath/ufunc_object.h +0 -0
  1422. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/src/umath/ufunc_type_resolution.h +0 -0
  1423. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/tests/data/astype_copy.pkl +0 -0
  1424. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/tests/data/recarray_from_file.fits +0 -0
  1425. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/core/tests/test_scalarprint.py +0 -0
  1426. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/ctypeslib.py +0 -0
  1427. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/__version__.py +0 -0
  1428. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/command/__init__.py +0 -0
  1429. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/command/bdist_rpm.py +0 -0
  1430. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/command/build_py.py +0 -0
  1431. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/command/build_scripts.py +0 -0
  1432. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/command/build_src.py +0 -0
  1433. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/command/config_compiler.py +0 -0
  1434. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/command/develop.py +0 -0
  1435. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/command/egg_info.py +0 -0
  1436. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/command/install.py +0 -0
  1437. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/command/install_clib.py +0 -0
  1438. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/command/install_data.py +0 -0
  1439. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/command/install_headers.py +0 -0
  1440. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/command/sdist.py +0 -0
  1441. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/compat.py +0 -0
  1442. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/conv_template.py +0 -0
  1443. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/core.py +0 -0
  1444. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/cpuinfo.py +0 -0
  1445. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/environment.py +0 -0
  1446. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/extension.py +0 -0
  1447. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/__init__.py +0 -0
  1448. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/absoft.py +0 -0
  1449. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/g95.py +0 -0
  1450. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/hpux.py +0 -0
  1451. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/ibm.py +0 -0
  1452. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/lahey.py +0 -0
  1453. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/mips.py +0 -0
  1454. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/nag.py +0 -0
  1455. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/none.py +0 -0
  1456. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/pathf95.py +0 -0
  1457. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/vast.py +0 -0
  1458. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/from_template.py +0 -0
  1459. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/info.py +0 -0
  1460. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/line_endings.py +0 -0
  1461. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/log.py +0 -0
  1462. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/mingw/gfortran_vs2003_hack.c +0 -0
  1463. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/numpy_distribution.py +0 -0
  1464. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/pathccompiler.py +0 -0
  1465. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/setup.py +0 -0
  1466. {numpy-1.9.3/numpy/distutils/tests/f2py_f90_ext → numpy-1.10.0.post2/numpy/distutils/tests/f2py_ext}/__init__.py +0 -0
  1467. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/tests/f2py_ext/setup.py +0 -0
  1468. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/tests/f2py_ext/src/fib1.f +0 -0
  1469. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/tests/f2py_ext/src/fib2.pyf +0 -0
  1470. {numpy-1.9.3/numpy/distutils/tests/gen_ext → numpy-1.10.0.post2/numpy/distutils/tests/f2py_f90_ext}/__init__.py +0 -0
  1471. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/tests/f2py_f90_ext/include/body.f90 +0 -0
  1472. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/tests/f2py_f90_ext/setup.py +0 -0
  1473. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/tests/f2py_f90_ext/src/foo_free.f90 +0 -0
  1474. {numpy-1.9.3/numpy/distutils/tests/pyrex_ext → numpy-1.10.0.post2/numpy/distutils/tests/gen_ext}/__init__.py +0 -0
  1475. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/tests/gen_ext/setup.py +0 -0
  1476. {numpy-1.9.3/numpy/distutils/tests/swig_ext → numpy-1.10.0.post2/numpy/distutils/tests/pyrex_ext}/__init__.py +0 -0
  1477. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/tests/pyrex_ext/primes.pyx +0 -0
  1478. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/tests/pyrex_ext/setup.py +0 -0
  1479. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/tests/setup.py +0 -0
  1480. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/tests/swig_ext/setup.py +0 -0
  1481. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/tests/swig_ext/src/example.c +0 -0
  1482. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/tests/swig_ext/src/example.i +0 -0
  1483. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/tests/swig_ext/src/zoo.cc +0 -0
  1484. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/tests/swig_ext/src/zoo.h +0 -0
  1485. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/tests/swig_ext/src/zoo.i +0 -0
  1486. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/distutils/tests/test_exec_command.py +0 -0
  1487. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/doc/__init__.py +0 -0
  1488. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/doc/basics.py +0 -0
  1489. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/doc/broadcasting.py +0 -0
  1490. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/doc/constants.py +0 -0
  1491. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/doc/howtofind.py +0 -0
  1492. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/doc/internals.py +0 -0
  1493. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/doc/io.py +0 -0
  1494. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/doc/jargon.py +0 -0
  1495. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/doc/methods_vs_functions.py +0 -0
  1496. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/doc/misc.py +0 -0
  1497. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/doc/performance.py +0 -0
  1498. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/doc/subclassing.py +0 -0
  1499. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/doc/ufuncs.py +0 -0
  1500. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/dual.py +0 -0
  1501. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/f2py/__version__.py +0 -0
  1502. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/f2py/info.py +0 -0
  1503. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/f2py/tests/src/assumed_shape/.f2py_f2cmap +0 -0
  1504. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/f2py/tests/src/assumed_shape/foo_free.f90 +0 -0
  1505. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/f2py/tests/src/assumed_shape/foo_mod.f90 +0 -0
  1506. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/f2py/tests/src/assumed_shape/foo_use.f90 +0 -0
  1507. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/f2py/tests/src/assumed_shape/precision.f90 +0 -0
  1508. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/f2py/tests/src/kind/foo.f90 +0 -0
  1509. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/f2py/tests/src/mixed/foo.f +0 -0
  1510. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/f2py/tests/src/mixed/foo_fixed.f90 +0 -0
  1511. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/f2py/tests/src/mixed/foo_free.f90 +0 -0
  1512. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/f2py/tests/src/regression/inout.f90 +0 -0
  1513. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/f2py/tests/src/size/foo.f90 +0 -0
  1514. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/fft/__init__.py +0 -0
  1515. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/fft/helper.py +0 -0
  1516. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/lib/__init__.py +0 -0
  1517. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/lib/_datasource.py +0 -0
  1518. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/lib/_version.py +0 -0
  1519. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/lib/scimath.py +0 -0
  1520. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/lib/tests/data/python3.npy +0 -0
  1521. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/lib/tests/data/win64python2.npy +0 -0
  1522. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/lib/tests/test__datasource.py +0 -0
  1523. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/lib/tests/test_arrayterator.py +0 -0
  1524. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/lib/tests/test_regression.py +0 -0
  1525. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/lib/tests/test_ufunclike.py +0 -0
  1526. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/lib/tests/test_utils.py +0 -0
  1527. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/lib/ufunclike.py +0 -0
  1528. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/lib/user_array.py +0 -0
  1529. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/linalg/__init__.py +0 -0
  1530. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/linalg/info.py +0 -0
  1531. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/linalg/lapack_lite/blas_lite.c +0 -0
  1532. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/linalg/lapack_lite/dlamch.c +0 -0
  1533. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/linalg/lapack_lite/dlapack_lite.c +0 -0
  1534. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/linalg/lapack_lite/f2c.h +0 -0
  1535. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/linalg/lapack_lite/f2c_lite.c +0 -0
  1536. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/linalg/lapack_lite/zlapack_lite.c +0 -0
  1537. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/linalg/setup.py +0 -0
  1538. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/linalg/tests/test_deprecations.py +0 -0
  1539. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/ma/version.py +0 -0
  1540. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/matrixlib/__init__.py +0 -0
  1541. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/matrixlib/setup.py +0 -0
  1542. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/polynomial/__init__.py +0 -0
  1543. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/polynomial/polynomial.py +0 -0
  1544. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/polynomial/setup.py +0 -0
  1545. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/polynomial/tests/test_chebyshev.py +0 -0
  1546. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/polynomial/tests/test_classes.py +0 -0
  1547. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/polynomial/tests/test_hermite.py +0 -0
  1548. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/polynomial/tests/test_hermite_e.py +0 -0
  1549. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/polynomial/tests/test_laguerre.py +0 -0
  1550. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/polynomial/tests/test_legendre.py +0 -0
  1551. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/polynomial/tests/test_polynomial.py +0 -0
  1552. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/polynomial/tests/test_polyutils.py +0 -0
  1553. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/polynomial/tests/test_printing.py +0 -0
  1554. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/random/__init__.py +0 -0
  1555. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/random/info.py +0 -0
  1556. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/random/mtrand/Python.pxi +0 -0
  1557. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/random/mtrand/distributions.h +0 -0
  1558. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/random/mtrand/generate_mtrand_c.py +0 -0
  1559. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/random/mtrand/initarray.c +0 -0
  1560. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/random/mtrand/initarray.h +0 -0
  1561. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/random/mtrand/mtrand_py_helper.h +0 -0
  1562. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/random/mtrand/numpy.pxd +0 -0
  1563. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/random/mtrand/randomkit.c +0 -0
  1564. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/random/mtrand/randomkit.h +0 -0
  1565. {numpy-1.9.3 → numpy-1.10.0.post2}/numpy/testing/tests/test_doctesting.py +0 -0
  1566. {numpy-1.9.3 → numpy-1.10.0.post2}/setupegg.py +0 -0
  1567. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/Makefile +0 -0
  1568. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/pyfragments.swg +0 -0
  1569. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/Array1.cxx +0 -0
  1570. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/Array1.h +0 -0
  1571. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/Array2.cxx +0 -0
  1572. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/Array2.h +0 -0
  1573. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/Farray.cxx +0 -0
  1574. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/Farray.h +0 -0
  1575. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/Farray.i +0 -0
  1576. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/Fortran.cxx +0 -0
  1577. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/Fortran.h +0 -0
  1578. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/Fortran.i +0 -0
  1579. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/Matrix.cxx +0 -0
  1580. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/Matrix.h +0 -0
  1581. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/Matrix.i +0 -0
  1582. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/SuperTensor.cxx +0 -0
  1583. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/SuperTensor.h +0 -0
  1584. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/SuperTensor.i +0 -0
  1585. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/Tensor.cxx +0 -0
  1586. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/Tensor.h +0 -0
  1587. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/Tensor.i +0 -0
  1588. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/Vector.cxx +0 -0
  1589. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/Vector.h +0 -0
  1590. {numpy-1.9.3 → numpy-1.10.0.post2}/tools/swig/test/Vector.i +0 -0
@@ -0,0 +1,3160 @@
1
+ /*
2
+ * This file implements the construction, copying, and destruction
3
+ * aspects of NumPy's nditer.
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
+
18
+ #include "arrayobject.h"
19
+ #include "templ_common.h"
20
+
21
+ /* Internal helper functions private to this file */
22
+ static int
23
+ npyiter_check_global_flags(npy_uint32 flags, npy_uint32* itflags);
24
+ static int
25
+ npyiter_check_op_axes(int nop, int oa_ndim, int **op_axes,
26
+ npy_intp *itershape);
27
+ static int
28
+ npyiter_calculate_ndim(int nop, PyArrayObject **op_in,
29
+ int oa_ndim);
30
+ static int
31
+ npyiter_check_per_op_flags(npy_uint32 flags, npyiter_opitflags *op_itflags);
32
+ static int
33
+ npyiter_prepare_one_operand(PyArrayObject **op,
34
+ char **op_dataptr,
35
+ PyArray_Descr *op_request_dtype,
36
+ PyArray_Descr** op_dtype,
37
+ npy_uint32 flags,
38
+ npy_uint32 op_flags, npyiter_opitflags *op_itflags);
39
+ static int
40
+ npyiter_prepare_operands(int nop,
41
+ PyArrayObject **op_in,
42
+ PyArrayObject **op,
43
+ char **op_dataptr,
44
+ PyArray_Descr **op_request_dtypes,
45
+ PyArray_Descr **op_dtype,
46
+ npy_uint32 flags,
47
+ npy_uint32 *op_flags, npyiter_opitflags *op_itflags,
48
+ npy_int8 *out_maskop);
49
+ static int
50
+ npyiter_check_casting(int nop, PyArrayObject **op,
51
+ PyArray_Descr **op_dtype,
52
+ NPY_CASTING casting,
53
+ npyiter_opitflags *op_itflags);
54
+ static int
55
+ npyiter_fill_axisdata(NpyIter *iter, npy_uint32 flags, npyiter_opitflags *op_itflags,
56
+ char **op_dataptr,
57
+ npy_uint32 *op_flags, int **op_axes,
58
+ npy_intp *itershape);
59
+ static void
60
+ npyiter_replace_axisdata(NpyIter *iter, int iop,
61
+ PyArrayObject *op,
62
+ int op_ndim, char *op_dataptr,
63
+ int *op_axes);
64
+ static void
65
+ npyiter_compute_index_strides(NpyIter *iter, npy_uint32 flags);
66
+ static void
67
+ npyiter_apply_forced_iteration_order(NpyIter *iter, NPY_ORDER order);
68
+ static void
69
+ npyiter_flip_negative_strides(NpyIter *iter);
70
+ static void
71
+ npyiter_reverse_axis_ordering(NpyIter *iter);
72
+ static void
73
+ npyiter_find_best_axis_ordering(NpyIter *iter);
74
+ static PyArray_Descr *
75
+ npyiter_get_common_dtype(int nop, PyArrayObject **op,
76
+ npyiter_opitflags *op_itflags, PyArray_Descr **op_dtype,
77
+ PyArray_Descr **op_request_dtypes,
78
+ int only_inputs);
79
+ static PyArrayObject *
80
+ npyiter_new_temp_array(NpyIter *iter, PyTypeObject *subtype,
81
+ npy_uint32 flags, npyiter_opitflags *op_itflags,
82
+ int op_ndim, npy_intp *shape,
83
+ PyArray_Descr *op_dtype, int *op_axes);
84
+ static int
85
+ npyiter_allocate_arrays(NpyIter *iter,
86
+ npy_uint32 flags,
87
+ PyArray_Descr **op_dtype, PyTypeObject *subtype,
88
+ npy_uint32 *op_flags, npyiter_opitflags *op_itflags,
89
+ int **op_axes);
90
+ static void
91
+ npyiter_get_priority_subtype(int nop, PyArrayObject **op,
92
+ npyiter_opitflags *op_itflags,
93
+ double *subtype_priority, PyTypeObject **subtype);
94
+ static int
95
+ npyiter_allocate_transfer_functions(NpyIter *iter);
96
+
97
+
98
+ /*NUMPY_API
99
+ * Allocate a new iterator for multiple array objects, and advanced
100
+ * options for controlling the broadcasting, shape, and buffer size.
101
+ */
102
+ NPY_NO_EXPORT NpyIter *
103
+ NpyIter_AdvancedNew(int nop, PyArrayObject **op_in, npy_uint32 flags,
104
+ NPY_ORDER order, NPY_CASTING casting,
105
+ npy_uint32 *op_flags,
106
+ PyArray_Descr **op_request_dtypes,
107
+ int oa_ndim, int **op_axes, npy_intp *itershape,
108
+ npy_intp buffersize)
109
+ {
110
+ npy_uint32 itflags = NPY_ITFLAG_IDENTPERM;
111
+ int idim, ndim;
112
+ int iop;
113
+
114
+ /* The iterator being constructed */
115
+ NpyIter *iter;
116
+
117
+ /* Per-operand values */
118
+ PyArrayObject **op;
119
+ PyArray_Descr **op_dtype;
120
+ npyiter_opitflags *op_itflags;
121
+ char **op_dataptr;
122
+
123
+ npy_int8 *perm;
124
+ NpyIter_BufferData *bufferdata = NULL;
125
+ int any_allocate = 0, any_missing_dtypes = 0, need_subtype = 0;
126
+
127
+ /* The subtype for automatically allocated outputs */
128
+ double subtype_priority = NPY_PRIORITY;
129
+ PyTypeObject *subtype = &PyArray_Type;
130
+
131
+ #if NPY_IT_CONSTRUCTION_TIMING
132
+ npy_intp c_temp,
133
+ c_start,
134
+ c_check_op_axes,
135
+ c_check_global_flags,
136
+ c_calculate_ndim,
137
+ c_malloc,
138
+ c_prepare_operands,
139
+ c_fill_axisdata,
140
+ c_compute_index_strides,
141
+ c_apply_forced_iteration_order,
142
+ c_find_best_axis_ordering,
143
+ c_get_priority_subtype,
144
+ c_find_output_common_dtype,
145
+ c_check_casting,
146
+ c_allocate_arrays,
147
+ c_coalesce_axes,
148
+ c_prepare_buffers;
149
+ #endif
150
+
151
+ NPY_IT_TIME_POINT(c_start);
152
+
153
+ if (nop > NPY_MAXARGS) {
154
+ PyErr_Format(PyExc_ValueError,
155
+ "Cannot construct an iterator with more than %d operands "
156
+ "(%d were requested)", (int)NPY_MAXARGS, (int)nop);
157
+ return NULL;
158
+ }
159
+
160
+ /*
161
+ * Before 1.8, if `oa_ndim == 0`, this meant `op_axes != NULL` was an error.
162
+ * With 1.8, `oa_ndim == -1` takes this role, while op_axes in that case
163
+ * enforces a 0-d iterator. Using `oa_ndim == 0` with `op_axes == NULL`
164
+ * is thus deprecated with version 1.8.
165
+ */
166
+ if ((oa_ndim == 0) && (op_axes == NULL)) {
167
+ char* mesg = "using `oa_ndim == 0` when `op_axes` is NULL is "
168
+ "deprecated. Use `oa_ndim == -1` or the MultiNew "
169
+ "iterator for NumPy <1.8 compatibility";
170
+ if (DEPRECATE(mesg) < 0) {
171
+ /* 2013-02-23, 1.8 */
172
+ return NULL;
173
+ }
174
+ oa_ndim = -1;
175
+ }
176
+
177
+ /* Error check 'oa_ndim' and 'op_axes', which must be used together */
178
+ if (!npyiter_check_op_axes(nop, oa_ndim, op_axes, itershape)) {
179
+ return NULL;
180
+ }
181
+
182
+ NPY_IT_TIME_POINT(c_check_op_axes);
183
+
184
+ /* Check the global iterator flags */
185
+ if (!npyiter_check_global_flags(flags, &itflags)) {
186
+ return NULL;
187
+ }
188
+
189
+ NPY_IT_TIME_POINT(c_check_global_flags);
190
+
191
+ /* Calculate how many dimensions the iterator should have */
192
+ ndim = npyiter_calculate_ndim(nop, op_in, oa_ndim);
193
+
194
+ NPY_IT_TIME_POINT(c_calculate_ndim);
195
+
196
+ /* Allocate memory for the iterator */
197
+ iter = (NpyIter*)
198
+ PyObject_Malloc(NIT_SIZEOF_ITERATOR(itflags, ndim, nop));
199
+
200
+ NPY_IT_TIME_POINT(c_malloc);
201
+
202
+ /* Fill in the basic data */
203
+ NIT_ITFLAGS(iter) = itflags;
204
+ NIT_NDIM(iter) = ndim;
205
+ NIT_NOP(iter) = nop;
206
+ NIT_MASKOP(iter) = -1;
207
+ NIT_ITERINDEX(iter) = 0;
208
+ memset(NIT_BASEOFFSETS(iter), 0, (nop+1)*NPY_SIZEOF_INTP);
209
+
210
+ op = NIT_OPERANDS(iter);
211
+ op_dtype = NIT_DTYPES(iter);
212
+ op_itflags = NIT_OPITFLAGS(iter);
213
+ op_dataptr = NIT_RESETDATAPTR(iter);
214
+
215
+ /* Prepare all the operands */
216
+ if (!npyiter_prepare_operands(nop, op_in, op, op_dataptr,
217
+ op_request_dtypes, op_dtype,
218
+ flags,
219
+ op_flags, op_itflags,
220
+ &NIT_MASKOP(iter))) {
221
+ PyObject_Free(iter);
222
+ return NULL;
223
+ }
224
+ /* Set resetindex to zero as well (it's just after the resetdataptr) */
225
+ op_dataptr[nop] = 0;
226
+
227
+ NPY_IT_TIME_POINT(c_prepare_operands);
228
+
229
+ /*
230
+ * Initialize buffer data (must set the buffers and transferdata
231
+ * to NULL before we might deallocate the iterator).
232
+ */
233
+ if (itflags & NPY_ITFLAG_BUFFER) {
234
+ bufferdata = NIT_BUFFERDATA(iter);
235
+ NBF_SIZE(bufferdata) = 0;
236
+ memset(NBF_BUFFERS(bufferdata), 0, nop*NPY_SIZEOF_INTP);
237
+ memset(NBF_PTRS(bufferdata), 0, nop*NPY_SIZEOF_INTP);
238
+ memset(NBF_READTRANSFERDATA(bufferdata), 0, nop*NPY_SIZEOF_INTP);
239
+ memset(NBF_WRITETRANSFERDATA(bufferdata), 0, nop*NPY_SIZEOF_INTP);
240
+ }
241
+
242
+ /* Fill in the AXISDATA arrays and set the ITERSIZE field */
243
+ if (!npyiter_fill_axisdata(iter, flags, op_itflags, op_dataptr,
244
+ op_flags, op_axes, itershape)) {
245
+ NpyIter_Deallocate(iter);
246
+ return NULL;
247
+ }
248
+
249
+ NPY_IT_TIME_POINT(c_fill_axisdata);
250
+
251
+ if (itflags & NPY_ITFLAG_BUFFER) {
252
+ /*
253
+ * If buffering is enabled and no buffersize was given, use a default
254
+ * chosen to be big enough to get some amortization benefits, but
255
+ * small enough to be cache-friendly.
256
+ */
257
+ if (buffersize <= 0) {
258
+ buffersize = NPY_BUFSIZE;
259
+ }
260
+ /* No point in a buffer bigger than the iteration size */
261
+ if (buffersize > NIT_ITERSIZE(iter)) {
262
+ buffersize = NIT_ITERSIZE(iter);
263
+ }
264
+ NBF_BUFFERSIZE(bufferdata) = buffersize;
265
+
266
+ /*
267
+ * Initialize for use in FirstVisit, which may be called before
268
+ * the buffers are filled and the reduce pos is updated.
269
+ */
270
+ NBF_REDUCE_POS(bufferdata) = 0;
271
+ }
272
+
273
+ /*
274
+ * If an index was requested, compute the strides for it.
275
+ * Note that we must do this before changing the order of the
276
+ * axes
277
+ */
278
+ npyiter_compute_index_strides(iter, flags);
279
+
280
+ NPY_IT_TIME_POINT(c_compute_index_strides);
281
+
282
+ /* Initialize the perm to the identity */
283
+ perm = NIT_PERM(iter);
284
+ for(idim = 0; idim < ndim; ++idim) {
285
+ perm[idim] = (npy_int8)idim;
286
+ }
287
+
288
+ /*
289
+ * If an iteration order is being forced, apply it.
290
+ */
291
+ npyiter_apply_forced_iteration_order(iter, order);
292
+ itflags = NIT_ITFLAGS(iter);
293
+
294
+ NPY_IT_TIME_POINT(c_apply_forced_iteration_order);
295
+
296
+ /* Set some flags for allocated outputs */
297
+ for (iop = 0; iop < nop; ++iop) {
298
+ if (op[iop] == NULL) {
299
+ /* Flag this so later we can avoid flipping axes */
300
+ any_allocate = 1;
301
+ /* If a subtype may be used, indicate so */
302
+ if (!(op_flags[iop] & NPY_ITER_NO_SUBTYPE)) {
303
+ need_subtype = 1;
304
+ }
305
+ /*
306
+ * If the data type wasn't provided, will need to
307
+ * calculate it.
308
+ */
309
+ if (op_dtype[iop] == NULL) {
310
+ any_missing_dtypes = 1;
311
+ }
312
+ }
313
+ }
314
+
315
+ /*
316
+ * If the ordering was not forced, reorder the axes
317
+ * and flip negative strides to find the best one.
318
+ */
319
+ if (!(itflags & NPY_ITFLAG_FORCEDORDER)) {
320
+ if (ndim > 1) {
321
+ npyiter_find_best_axis_ordering(iter);
322
+ }
323
+ /*
324
+ * If there's an output being allocated, we must not negate
325
+ * any strides.
326
+ */
327
+ if (!any_allocate && !(flags & NPY_ITER_DONT_NEGATE_STRIDES)) {
328
+ npyiter_flip_negative_strides(iter);
329
+ }
330
+ itflags = NIT_ITFLAGS(iter);
331
+ }
332
+
333
+ NPY_IT_TIME_POINT(c_find_best_axis_ordering);
334
+
335
+ if (need_subtype) {
336
+ npyiter_get_priority_subtype(nop, op, op_itflags,
337
+ &subtype_priority, &subtype);
338
+ }
339
+
340
+ NPY_IT_TIME_POINT(c_get_priority_subtype);
341
+
342
+ /*
343
+ * If an automatically allocated output didn't have a specified
344
+ * dtype, we need to figure it out now, before allocating the outputs.
345
+ */
346
+ if (any_missing_dtypes || (flags & NPY_ITER_COMMON_DTYPE)) {
347
+ PyArray_Descr *dtype;
348
+ int only_inputs = !(flags & NPY_ITER_COMMON_DTYPE);
349
+
350
+ op = NIT_OPERANDS(iter);
351
+ op_dtype = NIT_DTYPES(iter);
352
+
353
+ dtype = npyiter_get_common_dtype(nop, op,
354
+ op_itflags, op_dtype,
355
+ op_request_dtypes,
356
+ only_inputs);
357
+ if (dtype == NULL) {
358
+ NpyIter_Deallocate(iter);
359
+ return NULL;
360
+ }
361
+ if (flags & NPY_ITER_COMMON_DTYPE) {
362
+ NPY_IT_DBG_PRINT("Iterator: Replacing all data types\n");
363
+ /* Replace all the data types */
364
+ for (iop = 0; iop < nop; ++iop) {
365
+ if (op_dtype[iop] != dtype) {
366
+ Py_XDECREF(op_dtype[iop]);
367
+ Py_INCREF(dtype);
368
+ op_dtype[iop] = dtype;
369
+ }
370
+ }
371
+ }
372
+ else {
373
+ NPY_IT_DBG_PRINT("Iterator: Setting unset output data types\n");
374
+ /* Replace the NULL data types */
375
+ for (iop = 0; iop < nop; ++iop) {
376
+ if (op_dtype[iop] == NULL) {
377
+ Py_INCREF(dtype);
378
+ op_dtype[iop] = dtype;
379
+ }
380
+ }
381
+ }
382
+ Py_DECREF(dtype);
383
+ }
384
+
385
+ NPY_IT_TIME_POINT(c_find_output_common_dtype);
386
+
387
+ /*
388
+ * All of the data types have been settled, so it's time
389
+ * to check that data type conversions are following the
390
+ * casting rules.
391
+ */
392
+ if (!npyiter_check_casting(nop, op, op_dtype, casting, op_itflags)) {
393
+ NpyIter_Deallocate(iter);
394
+ return NULL;
395
+ }
396
+
397
+ NPY_IT_TIME_POINT(c_check_casting);
398
+
399
+ /*
400
+ * At this point, the iteration order has been finalized. so
401
+ * any allocation of ops that were NULL, or any temporary
402
+ * copying due to casting/byte order/alignment can be
403
+ * done now using a memory layout matching the iterator.
404
+ */
405
+ if (!npyiter_allocate_arrays(iter, flags, op_dtype, subtype, op_flags,
406
+ op_itflags, op_axes)) {
407
+ NpyIter_Deallocate(iter);
408
+ return NULL;
409
+ }
410
+
411
+ NPY_IT_TIME_POINT(c_allocate_arrays);
412
+
413
+ /*
414
+ * Finally, if a multi-index wasn't requested,
415
+ * it may be possible to coalesce some axes together.
416
+ */
417
+ if (ndim > 1 && !(itflags & NPY_ITFLAG_HASMULTIINDEX)) {
418
+ npyiter_coalesce_axes(iter);
419
+ /*
420
+ * The operation may have changed the layout, so we have to
421
+ * get the internal pointers again.
422
+ */
423
+ itflags = NIT_ITFLAGS(iter);
424
+ ndim = NIT_NDIM(iter);
425
+ op = NIT_OPERANDS(iter);
426
+ op_dtype = NIT_DTYPES(iter);
427
+ op_itflags = NIT_OPITFLAGS(iter);
428
+ op_dataptr = NIT_RESETDATAPTR(iter);
429
+ }
430
+
431
+ NPY_IT_TIME_POINT(c_coalesce_axes);
432
+
433
+ /*
434
+ * Now that the axes are finished, check whether we can apply
435
+ * the single iteration optimization to the iternext function.
436
+ */
437
+ if (!(itflags & NPY_ITFLAG_BUFFER)) {
438
+ NpyIter_AxisData *axisdata = NIT_AXISDATA(iter);
439
+ if (itflags & NPY_ITFLAG_EXLOOP) {
440
+ if (NIT_ITERSIZE(iter) == NAD_SHAPE(axisdata)) {
441
+ NIT_ITFLAGS(iter) |= NPY_ITFLAG_ONEITERATION;
442
+ }
443
+ }
444
+ else if (NIT_ITERSIZE(iter) == 1) {
445
+ NIT_ITFLAGS(iter) |= NPY_ITFLAG_ONEITERATION;
446
+ }
447
+ }
448
+
449
+ /*
450
+ * If REFS_OK was specified, check whether there are any
451
+ * reference arrays and flag it if so.
452
+ */
453
+ if (flags & NPY_ITER_REFS_OK) {
454
+ for (iop = 0; iop < nop; ++iop) {
455
+ PyArray_Descr *rdt = op_dtype[iop];
456
+ if ((rdt->flags & (NPY_ITEM_REFCOUNT |
457
+ NPY_ITEM_IS_POINTER |
458
+ NPY_NEEDS_PYAPI)) != 0) {
459
+ /* Iteration needs API access */
460
+ NIT_ITFLAGS(iter) |= NPY_ITFLAG_NEEDSAPI;
461
+ }
462
+ }
463
+ }
464
+
465
+ /* If buffering is set without delayed allocation */
466
+ if (itflags & NPY_ITFLAG_BUFFER) {
467
+ if (!npyiter_allocate_transfer_functions(iter)) {
468
+ NpyIter_Deallocate(iter);
469
+ return NULL;
470
+ }
471
+ if (!(itflags & NPY_ITFLAG_DELAYBUF)) {
472
+ /* Allocate the buffers */
473
+ if (!npyiter_allocate_buffers(iter, NULL)) {
474
+ NpyIter_Deallocate(iter);
475
+ return NULL;
476
+ }
477
+
478
+ /* Prepare the next buffers and set iterend/size */
479
+ npyiter_copy_to_buffers(iter, NULL);
480
+ }
481
+ }
482
+
483
+ NPY_IT_TIME_POINT(c_prepare_buffers);
484
+
485
+ #if NPY_IT_CONSTRUCTION_TIMING
486
+ printf("\nIterator construction timing:\n");
487
+ NPY_IT_PRINT_TIME_START(c_start);
488
+ NPY_IT_PRINT_TIME_VAR(c_check_op_axes);
489
+ NPY_IT_PRINT_TIME_VAR(c_check_global_flags);
490
+ NPY_IT_PRINT_TIME_VAR(c_calculate_ndim);
491
+ NPY_IT_PRINT_TIME_VAR(c_malloc);
492
+ NPY_IT_PRINT_TIME_VAR(c_prepare_operands);
493
+ NPY_IT_PRINT_TIME_VAR(c_fill_axisdata);
494
+ NPY_IT_PRINT_TIME_VAR(c_compute_index_strides);
495
+ NPY_IT_PRINT_TIME_VAR(c_apply_forced_iteration_order);
496
+ NPY_IT_PRINT_TIME_VAR(c_find_best_axis_ordering);
497
+ NPY_IT_PRINT_TIME_VAR(c_get_priority_subtype);
498
+ NPY_IT_PRINT_TIME_VAR(c_find_output_common_dtype);
499
+ NPY_IT_PRINT_TIME_VAR(c_check_casting);
500
+ NPY_IT_PRINT_TIME_VAR(c_allocate_arrays);
501
+ NPY_IT_PRINT_TIME_VAR(c_coalesce_axes);
502
+ NPY_IT_PRINT_TIME_VAR(c_prepare_buffers);
503
+ printf("\n");
504
+ #endif
505
+
506
+ return iter;
507
+ }
508
+
509
+ /*NUMPY_API
510
+ * Allocate a new iterator for more than one array object, using
511
+ * standard NumPy broadcasting rules and the default buffer size.
512
+ */
513
+ NPY_NO_EXPORT NpyIter *
514
+ NpyIter_MultiNew(int nop, PyArrayObject **op_in, npy_uint32 flags,
515
+ NPY_ORDER order, NPY_CASTING casting,
516
+ npy_uint32 *op_flags,
517
+ PyArray_Descr **op_request_dtypes)
518
+ {
519
+ return NpyIter_AdvancedNew(nop, op_in, flags, order, casting,
520
+ op_flags, op_request_dtypes,
521
+ -1, NULL, NULL, 0);
522
+ }
523
+
524
+ /*NUMPY_API
525
+ * Allocate a new iterator for one array object.
526
+ */
527
+ NPY_NO_EXPORT NpyIter *
528
+ NpyIter_New(PyArrayObject *op, npy_uint32 flags,
529
+ NPY_ORDER order, NPY_CASTING casting,
530
+ PyArray_Descr* dtype)
531
+ {
532
+ /* Split the flags into separate global and op flags */
533
+ npy_uint32 op_flags = flags & NPY_ITER_PER_OP_FLAGS;
534
+ flags &= NPY_ITER_GLOBAL_FLAGS;
535
+
536
+ return NpyIter_AdvancedNew(1, &op, flags, order, casting,
537
+ &op_flags, &dtype,
538
+ -1, NULL, NULL, 0);
539
+ }
540
+
541
+ /*NUMPY_API
542
+ * Makes a copy of the iterator
543
+ */
544
+ NPY_NO_EXPORT NpyIter *
545
+ NpyIter_Copy(NpyIter *iter)
546
+ {
547
+ npy_uint32 itflags = NIT_ITFLAGS(iter);
548
+ int ndim = NIT_NDIM(iter);
549
+ int iop, nop = NIT_NOP(iter);
550
+ int out_of_memory = 0;
551
+
552
+ npy_intp size;
553
+ NpyIter *newiter;
554
+ PyArrayObject **objects;
555
+ PyArray_Descr **dtypes;
556
+
557
+ /* Allocate memory for the new iterator */
558
+ size = NIT_SIZEOF_ITERATOR(itflags, ndim, nop);
559
+ newiter = (NpyIter*)PyObject_Malloc(size);
560
+
561
+ /* Copy the raw values to the new iterator */
562
+ memcpy(newiter, iter, size);
563
+
564
+ /* Take ownership of references to the operands and dtypes */
565
+ objects = NIT_OPERANDS(newiter);
566
+ dtypes = NIT_DTYPES(newiter);
567
+ for (iop = 0; iop < nop; ++iop) {
568
+ Py_INCREF(objects[iop]);
569
+ Py_INCREF(dtypes[iop]);
570
+ }
571
+
572
+ /* Allocate buffers and make copies of the transfer data if necessary */
573
+ if (itflags & NPY_ITFLAG_BUFFER) {
574
+ NpyIter_BufferData *bufferdata;
575
+ npy_intp buffersize, itemsize;
576
+ char **buffers;
577
+ NpyAuxData **readtransferdata, **writetransferdata;
578
+
579
+ bufferdata = NIT_BUFFERDATA(newiter);
580
+ buffers = NBF_BUFFERS(bufferdata);
581
+ readtransferdata = NBF_READTRANSFERDATA(bufferdata);
582
+ writetransferdata = NBF_WRITETRANSFERDATA(bufferdata);
583
+ buffersize = NBF_BUFFERSIZE(bufferdata);
584
+
585
+ for (iop = 0; iop < nop; ++iop) {
586
+ if (buffers[iop] != NULL) {
587
+ if (out_of_memory) {
588
+ buffers[iop] = NULL;
589
+ }
590
+ else {
591
+ itemsize = dtypes[iop]->elsize;
592
+ buffers[iop] = PyArray_malloc(itemsize*buffersize);
593
+ if (buffers[iop] == NULL) {
594
+ out_of_memory = 1;
595
+ }
596
+ }
597
+ }
598
+
599
+ if (readtransferdata[iop] != NULL) {
600
+ if (out_of_memory) {
601
+ readtransferdata[iop] = NULL;
602
+ }
603
+ else {
604
+ readtransferdata[iop] =
605
+ NPY_AUXDATA_CLONE(readtransferdata[iop]);
606
+ if (readtransferdata[iop] == NULL) {
607
+ out_of_memory = 1;
608
+ }
609
+ }
610
+ }
611
+
612
+ if (writetransferdata[iop] != NULL) {
613
+ if (out_of_memory) {
614
+ writetransferdata[iop] = NULL;
615
+ }
616
+ else {
617
+ writetransferdata[iop] =
618
+ NPY_AUXDATA_CLONE(writetransferdata[iop]);
619
+ if (writetransferdata[iop] == NULL) {
620
+ out_of_memory = 1;
621
+ }
622
+ }
623
+ }
624
+ }
625
+
626
+ /* Initialize the buffers to the current iterindex */
627
+ if (!out_of_memory && NBF_SIZE(bufferdata) > 0) {
628
+ npyiter_goto_iterindex(newiter, NIT_ITERINDEX(newiter));
629
+
630
+ /* Prepare the next buffers and set iterend/size */
631
+ npyiter_copy_to_buffers(newiter, NULL);
632
+ }
633
+ }
634
+
635
+ if (out_of_memory) {
636
+ NpyIter_Deallocate(newiter);
637
+ PyErr_NoMemory();
638
+ return NULL;
639
+ }
640
+
641
+ return newiter;
642
+ }
643
+
644
+ /*NUMPY_API
645
+ * Deallocate an iterator
646
+ */
647
+ NPY_NO_EXPORT int
648
+ NpyIter_Deallocate(NpyIter *iter)
649
+ {
650
+ npy_uint32 itflags;
651
+ /*int ndim = NIT_NDIM(iter);*/
652
+ int iop, nop;
653
+ PyArray_Descr **dtype;
654
+ PyArrayObject **object;
655
+
656
+ if (iter == NULL) {
657
+ return NPY_SUCCEED;
658
+ }
659
+
660
+ itflags = NIT_ITFLAGS(iter);
661
+ nop = NIT_NOP(iter);
662
+ dtype = NIT_DTYPES(iter);
663
+ object = NIT_OPERANDS(iter);
664
+
665
+ /* Deallocate any buffers and buffering data */
666
+ if (itflags & NPY_ITFLAG_BUFFER) {
667
+ NpyIter_BufferData *bufferdata = NIT_BUFFERDATA(iter);
668
+ char **buffers;
669
+ NpyAuxData **transferdata;
670
+
671
+ /* buffers */
672
+ buffers = NBF_BUFFERS(bufferdata);
673
+ for(iop = 0; iop < nop; ++iop, ++buffers) {
674
+ PyArray_free(*buffers);
675
+ }
676
+ /* read bufferdata */
677
+ transferdata = NBF_READTRANSFERDATA(bufferdata);
678
+ for(iop = 0; iop < nop; ++iop, ++transferdata) {
679
+ if (*transferdata) {
680
+ NPY_AUXDATA_FREE(*transferdata);
681
+ }
682
+ }
683
+ /* write bufferdata */
684
+ transferdata = NBF_WRITETRANSFERDATA(bufferdata);
685
+ for(iop = 0; iop < nop; ++iop, ++transferdata) {
686
+ if (*transferdata) {
687
+ NPY_AUXDATA_FREE(*transferdata);
688
+ }
689
+ }
690
+ }
691
+
692
+ /* Deallocate all the dtypes and objects that were iterated */
693
+ for(iop = 0; iop < nop; ++iop, ++dtype, ++object) {
694
+ Py_XDECREF(*dtype);
695
+ Py_XDECREF(*object);
696
+ }
697
+
698
+ /* Deallocate the iterator memory */
699
+ PyObject_Free(iter);
700
+
701
+ return NPY_SUCCEED;
702
+ }
703
+
704
+ /* Checks 'flags' for (C|F)_ORDER_INDEX, MULTI_INDEX, and EXTERNAL_LOOP,
705
+ * setting the appropriate internal flags in 'itflags'.
706
+ *
707
+ * Returns 1 on success, 0 on error.
708
+ */
709
+ static int
710
+ npyiter_check_global_flags(npy_uint32 flags, npy_uint32* itflags)
711
+ {
712
+ if ((flags & NPY_ITER_PER_OP_FLAGS) != 0) {
713
+ PyErr_SetString(PyExc_ValueError,
714
+ "A per-operand flag was passed as a global flag "
715
+ "to the iterator constructor");
716
+ return 0;
717
+ }
718
+
719
+ /* Check for an index */
720
+ if (flags & (NPY_ITER_C_INDEX | NPY_ITER_F_INDEX)) {
721
+ if ((flags & (NPY_ITER_C_INDEX | NPY_ITER_F_INDEX)) ==
722
+ (NPY_ITER_C_INDEX | NPY_ITER_F_INDEX)) {
723
+ PyErr_SetString(PyExc_ValueError,
724
+ "Iterator flags C_INDEX and "
725
+ "F_INDEX cannot both be specified");
726
+ return 0;
727
+ }
728
+ (*itflags) |= NPY_ITFLAG_HASINDEX;
729
+ }
730
+ /* Check if a multi-index was requested */
731
+ if (flags & NPY_ITER_MULTI_INDEX) {
732
+ /*
733
+ * This flag primarily disables dimension manipulations that
734
+ * would produce an incorrect multi-index.
735
+ */
736
+ (*itflags) |= NPY_ITFLAG_HASMULTIINDEX;
737
+ }
738
+ /* Check if the caller wants to handle inner iteration */
739
+ if (flags & NPY_ITER_EXTERNAL_LOOP) {
740
+ if ((*itflags) & (NPY_ITFLAG_HASINDEX | NPY_ITFLAG_HASMULTIINDEX)) {
741
+ PyErr_SetString(PyExc_ValueError,
742
+ "Iterator flag EXTERNAL_LOOP cannot be used "
743
+ "if an index or multi-index is being tracked");
744
+ return 0;
745
+ }
746
+ (*itflags) |= NPY_ITFLAG_EXLOOP;
747
+ }
748
+ /* Ranged */
749
+ if (flags & NPY_ITER_RANGED) {
750
+ (*itflags) |= NPY_ITFLAG_RANGE;
751
+ if ((flags & NPY_ITER_EXTERNAL_LOOP) &&
752
+ !(flags & NPY_ITER_BUFFERED)) {
753
+ PyErr_SetString(PyExc_ValueError,
754
+ "Iterator flag RANGED cannot be used with "
755
+ "the flag EXTERNAL_LOOP unless "
756
+ "BUFFERED is also enabled");
757
+ return 0;
758
+ }
759
+ }
760
+ /* Buffering */
761
+ if (flags & NPY_ITER_BUFFERED) {
762
+ (*itflags) |= NPY_ITFLAG_BUFFER;
763
+ if (flags & NPY_ITER_GROWINNER) {
764
+ (*itflags) |= NPY_ITFLAG_GROWINNER;
765
+ }
766
+ if (flags & NPY_ITER_DELAY_BUFALLOC) {
767
+ (*itflags) |= NPY_ITFLAG_DELAYBUF;
768
+ }
769
+ }
770
+
771
+ return 1;
772
+ }
773
+
774
+ static int
775
+ npyiter_check_op_axes(int nop, int oa_ndim, int **op_axes,
776
+ npy_intp *itershape)
777
+ {
778
+ char axes_dupcheck[NPY_MAXDIMS];
779
+ int iop, idim;
780
+
781
+ if (oa_ndim < 0) {
782
+ /*
783
+ * If `oa_ndim < 0`, `op_axes` and `itershape` are signalled to
784
+ * be unused and should be NULL. (Before NumPy 1.8 this was
785
+ * signalled by `oa_ndim == 0`.)
786
+ */
787
+ if (op_axes != NULL || itershape != NULL) {
788
+ PyErr_Format(PyExc_ValueError,
789
+ "If 'op_axes' or 'itershape' is not NULL in the iterator "
790
+ "constructor, 'oa_ndim' must be zero or greater");
791
+ return 0;
792
+ }
793
+ return 1;
794
+ }
795
+ if (oa_ndim > NPY_MAXDIMS) {
796
+ PyErr_Format(PyExc_ValueError,
797
+ "Cannot construct an iterator with more than %d dimensions "
798
+ "(%d were requested for op_axes)",
799
+ (int)NPY_MAXDIMS, oa_ndim);
800
+ return 0;
801
+ }
802
+ if (op_axes == NULL) {
803
+ PyErr_Format(PyExc_ValueError,
804
+ "If 'oa_ndim' is zero or greater in the iterator "
805
+ "constructor, then op_axes cannot be NULL");
806
+ return 0;
807
+ }
808
+
809
+ /* Check that there are no duplicates in op_axes */
810
+ for (iop = 0; iop < nop; ++iop) {
811
+ int *axes = op_axes[iop];
812
+ if (axes != NULL) {
813
+ memset(axes_dupcheck, 0, NPY_MAXDIMS);
814
+ for (idim = 0; idim < oa_ndim; ++idim) {
815
+ npy_intp i = axes[idim];
816
+ if (i >= 0) {
817
+ if (i >= NPY_MAXDIMS) {
818
+ PyErr_Format(PyExc_ValueError,
819
+ "The 'op_axes' provided to the iterator "
820
+ "constructor for operand %d "
821
+ "contained invalid "
822
+ "values %d", (int)iop, (int)i);
823
+ return 0;
824
+ }
825
+ else if (axes_dupcheck[i] == 1) {
826
+ PyErr_Format(PyExc_ValueError,
827
+ "The 'op_axes' provided to the iterator "
828
+ "constructor for operand %d "
829
+ "contained duplicate "
830
+ "value %d", (int)iop, (int)i);
831
+ return 0;
832
+ }
833
+ else {
834
+ axes_dupcheck[i] = 1;
835
+ }
836
+ }
837
+ }
838
+ }
839
+ }
840
+
841
+ return 1;
842
+ }
843
+
844
+ static int
845
+ npyiter_calculate_ndim(int nop, PyArrayObject **op_in,
846
+ int oa_ndim)
847
+ {
848
+ /* If 'op_axes' is being used, force 'ndim' */
849
+ if (oa_ndim >= 0 ) {
850
+ return oa_ndim;
851
+ }
852
+ /* Otherwise it's the maximum 'ndim' from the operands */
853
+ else {
854
+ int ndim = 0, iop;
855
+
856
+ for (iop = 0; iop < nop; ++iop) {
857
+ if (op_in[iop] != NULL) {
858
+ int ondim = PyArray_NDIM(op_in[iop]);
859
+ if (ondim > ndim) {
860
+ ndim = ondim;
861
+ }
862
+ }
863
+
864
+ }
865
+
866
+ return ndim;
867
+ }
868
+ }
869
+
870
+ /*
871
+ * Checks the per-operand input flags, and fills in op_itflags.
872
+ *
873
+ * Returns 1 on success, 0 on failure.
874
+ */
875
+ static int
876
+ npyiter_check_per_op_flags(npy_uint32 op_flags, npyiter_opitflags *op_itflags)
877
+ {
878
+ if ((op_flags & NPY_ITER_GLOBAL_FLAGS) != 0) {
879
+ PyErr_SetString(PyExc_ValueError,
880
+ "A global iterator flag was passed as a per-operand flag "
881
+ "to the iterator constructor");
882
+ return 0;
883
+ }
884
+
885
+ /* Check the read/write flags */
886
+ if (op_flags & NPY_ITER_READONLY) {
887
+ /* The read/write flags are mutually exclusive */
888
+ if (op_flags & (NPY_ITER_READWRITE|NPY_ITER_WRITEONLY)) {
889
+ PyErr_SetString(PyExc_ValueError,
890
+ "Only one of the iterator flags READWRITE, "
891
+ "READONLY, and WRITEONLY may be "
892
+ "specified for an operand");
893
+ return 0;
894
+ }
895
+
896
+ *op_itflags = NPY_OP_ITFLAG_READ;
897
+ }
898
+ else if (op_flags & NPY_ITER_READWRITE) {
899
+ /* The read/write flags are mutually exclusive */
900
+ if (op_flags & NPY_ITER_WRITEONLY) {
901
+ PyErr_SetString(PyExc_ValueError,
902
+ "Only one of the iterator flags READWRITE, "
903
+ "READONLY, and WRITEONLY may be "
904
+ "specified for an operand");
905
+ return 0;
906
+ }
907
+
908
+ *op_itflags = NPY_OP_ITFLAG_READ|NPY_OP_ITFLAG_WRITE;
909
+ }
910
+ else if(op_flags & NPY_ITER_WRITEONLY) {
911
+ *op_itflags = NPY_OP_ITFLAG_WRITE;
912
+ }
913
+ else {
914
+ PyErr_SetString(PyExc_ValueError,
915
+ "None of the iterator flags READWRITE, "
916
+ "READONLY, or WRITEONLY were "
917
+ "specified for an operand");
918
+ return 0;
919
+ }
920
+
921
+ /* Check the flags for temporary copies */
922
+ if (((*op_itflags) & NPY_OP_ITFLAG_WRITE) &&
923
+ (op_flags & (NPY_ITER_COPY |
924
+ NPY_ITER_UPDATEIFCOPY)) == NPY_ITER_COPY) {
925
+ PyErr_SetString(PyExc_ValueError,
926
+ "If an iterator operand is writeable, must use "
927
+ "the flag UPDATEIFCOPY instead of "
928
+ "COPY");
929
+ return 0;
930
+ }
931
+
932
+ /* Check the flag for a write masked operands */
933
+ if (op_flags & NPY_ITER_WRITEMASKED) {
934
+ if (!((*op_itflags) & NPY_OP_ITFLAG_WRITE)) {
935
+ PyErr_SetString(PyExc_ValueError,
936
+ "The iterator flag WRITEMASKED may only "
937
+ "be used with READWRITE or WRITEONLY");
938
+ return 0;
939
+ }
940
+ if ((op_flags & NPY_ITER_ARRAYMASK) != 0) {
941
+ PyErr_SetString(PyExc_ValueError,
942
+ "The iterator flag WRITEMASKED may not "
943
+ "be used together with ARRAYMASK");
944
+ return 0;
945
+ }
946
+ *op_itflags |= NPY_OP_ITFLAG_WRITEMASKED;
947
+ }
948
+
949
+ if ((op_flags & NPY_ITER_VIRTUAL) != 0) {
950
+ if ((op_flags & NPY_ITER_READWRITE) == 0) {
951
+ PyErr_SetString(PyExc_ValueError,
952
+ "The iterator flag VIRTUAL should be "
953
+ "be used together with READWRITE");
954
+ return 0;
955
+ }
956
+ *op_itflags |= NPY_OP_ITFLAG_VIRTUAL;
957
+ }
958
+
959
+ return 1;
960
+ }
961
+
962
+ /*
963
+ * Prepares a a constructor operand. Assumes a reference to 'op'
964
+ * is owned, and that 'op' may be replaced. Fills in 'op_dataptr',
965
+ * 'op_dtype', and may modify 'op_itflags'.
966
+ *
967
+ * Returns 1 on success, 0 on failure.
968
+ */
969
+ static int
970
+ npyiter_prepare_one_operand(PyArrayObject **op,
971
+ char **op_dataptr,
972
+ PyArray_Descr *op_request_dtype,
973
+ PyArray_Descr **op_dtype,
974
+ npy_uint32 flags,
975
+ npy_uint32 op_flags, npyiter_opitflags *op_itflags)
976
+ {
977
+ /* NULL operands must be automatically allocated outputs */
978
+ if (*op == NULL) {
979
+ /* ALLOCATE or VIRTUAL should be enabled */
980
+ if ((op_flags & (NPY_ITER_ALLOCATE|NPY_ITER_VIRTUAL)) == 0) {
981
+ PyErr_SetString(PyExc_ValueError,
982
+ "Iterator operand was NULL, but neither the "
983
+ "ALLOCATE nor the VIRTUAL flag was specified");
984
+ return 0;
985
+ }
986
+
987
+ if (op_flags & NPY_ITER_ALLOCATE) {
988
+ /* Writing should be enabled */
989
+ if (!((*op_itflags) & NPY_OP_ITFLAG_WRITE)) {
990
+ PyErr_SetString(PyExc_ValueError,
991
+ "Automatic allocation was requested for an iterator "
992
+ "operand, but it wasn't flagged for writing");
993
+ return 0;
994
+ }
995
+ /*
996
+ * Reading should be disabled if buffering is enabled without
997
+ * also enabling NPY_ITER_DELAY_BUFALLOC. In all other cases,
998
+ * the caller may initialize the allocated operand to a value
999
+ * before beginning iteration.
1000
+ */
1001
+ if (((flags & (NPY_ITER_BUFFERED |
1002
+ NPY_ITER_DELAY_BUFALLOC)) == NPY_ITER_BUFFERED) &&
1003
+ ((*op_itflags) & NPY_OP_ITFLAG_READ)) {
1004
+ PyErr_SetString(PyExc_ValueError,
1005
+ "Automatic allocation was requested for an iterator "
1006
+ "operand, and it was flagged as readable, but "
1007
+ "buffering without delayed allocation was enabled");
1008
+ return 0;
1009
+ }
1010
+
1011
+ /* If a requested dtype was provided, use it, otherwise NULL */
1012
+ Py_XINCREF(op_request_dtype);
1013
+ *op_dtype = op_request_dtype;
1014
+ }
1015
+ else {
1016
+ *op_dtype = NULL;
1017
+ }
1018
+
1019
+ /* Specify bool if no dtype was requested for the mask */
1020
+ if (op_flags & NPY_ITER_ARRAYMASK) {
1021
+ if (*op_dtype == NULL) {
1022
+ *op_dtype = PyArray_DescrFromType(NPY_BOOL);
1023
+ if (*op_dtype == NULL) {
1024
+ return 0;
1025
+ }
1026
+ }
1027
+ }
1028
+
1029
+ *op_dataptr = NULL;
1030
+
1031
+ return 1;
1032
+ }
1033
+
1034
+ /* VIRTUAL operands must be NULL */
1035
+ if (op_flags & NPY_ITER_VIRTUAL) {
1036
+ PyErr_SetString(PyExc_ValueError,
1037
+ "Iterator operand flag VIRTUAL was specified, "
1038
+ "but the operand was not NULL");
1039
+ return 0;
1040
+ }
1041
+
1042
+
1043
+ if (PyArray_Check(*op)) {
1044
+
1045
+ if ((*op_itflags) & NPY_OP_ITFLAG_WRITE
1046
+ && PyArray_FailUnlessWriteable(*op, "operand array with iterator "
1047
+ "write flag set") < 0) {
1048
+ return 0;
1049
+ }
1050
+ if (!(flags & NPY_ITER_ZEROSIZE_OK) && PyArray_SIZE(*op) == 0) {
1051
+ PyErr_SetString(PyExc_ValueError,
1052
+ "Iteration of zero-sized operands is not enabled");
1053
+ return 0;
1054
+ }
1055
+ *op_dataptr = PyArray_BYTES(*op);
1056
+ /* PyArray_DESCR does not give us a reference */
1057
+ *op_dtype = PyArray_DESCR(*op);
1058
+ if (*op_dtype == NULL) {
1059
+ PyErr_SetString(PyExc_ValueError,
1060
+ "Iterator input operand has no dtype descr");
1061
+ return 0;
1062
+ }
1063
+ Py_INCREF(*op_dtype);
1064
+ /*
1065
+ * If references weren't specifically allowed, make sure there
1066
+ * are no references in the inputs or requested dtypes.
1067
+ */
1068
+ if (!(flags & NPY_ITER_REFS_OK)) {
1069
+ PyArray_Descr *dt = PyArray_DESCR(*op);
1070
+ if (((dt->flags & (NPY_ITEM_REFCOUNT |
1071
+ NPY_ITEM_IS_POINTER)) != 0) ||
1072
+ (dt != *op_dtype &&
1073
+ (((*op_dtype)->flags & (NPY_ITEM_REFCOUNT |
1074
+ NPY_ITEM_IS_POINTER))) != 0)) {
1075
+ PyErr_SetString(PyExc_TypeError,
1076
+ "Iterator operand or requested dtype holds "
1077
+ "references, but the REFS_OK flag was not enabled");
1078
+ return 0;
1079
+ }
1080
+ }
1081
+ /*
1082
+ * Checking whether casts are valid is done later, once the
1083
+ * final data types have been selected. For now, just store the
1084
+ * requested type.
1085
+ */
1086
+ if (op_request_dtype != NULL) {
1087
+ /* We just have a borrowed reference to op_request_dtype */
1088
+ Py_INCREF(op_request_dtype);
1089
+ /* If the requested dtype is flexible, adapt it */
1090
+ PyArray_AdaptFlexibleDType((PyObject *)(*op), PyArray_DESCR(*op),
1091
+ &op_request_dtype);
1092
+ if (op_request_dtype == NULL) {
1093
+ return 0;
1094
+ }
1095
+
1096
+ /* Store the requested dtype */
1097
+ Py_DECREF(*op_dtype);
1098
+ *op_dtype = op_request_dtype;
1099
+ }
1100
+
1101
+ /* Check if the operand is in the byte order requested */
1102
+ if (op_flags & NPY_ITER_NBO) {
1103
+ /* Check byte order */
1104
+ if (!PyArray_ISNBO((*op_dtype)->byteorder)) {
1105
+ PyArray_Descr *nbo_dtype;
1106
+
1107
+ /* Replace with a new descr which is in native byte order */
1108
+ nbo_dtype = PyArray_DescrNewByteorder(*op_dtype, NPY_NATIVE);
1109
+ Py_DECREF(*op_dtype);
1110
+ *op_dtype = nbo_dtype;
1111
+
1112
+ NPY_IT_DBG_PRINT("Iterator: Setting NPY_OP_ITFLAG_CAST "
1113
+ "because of NPY_ITER_NBO\n");
1114
+ /* Indicate that byte order or alignment needs fixing */
1115
+ *op_itflags |= NPY_OP_ITFLAG_CAST;
1116
+ }
1117
+ }
1118
+ /* Check if the operand is aligned */
1119
+ if (op_flags & NPY_ITER_ALIGNED) {
1120
+ /* Check alignment */
1121
+ if (!PyArray_ISALIGNED(*op)) {
1122
+ NPY_IT_DBG_PRINT("Iterator: Setting NPY_OP_ITFLAG_CAST "
1123
+ "because of NPY_ITER_ALIGNED\n");
1124
+ *op_itflags |= NPY_OP_ITFLAG_CAST;
1125
+ }
1126
+ }
1127
+ /*
1128
+ * The check for NPY_ITER_CONTIG can only be done later,
1129
+ * once the final iteration order is settled.
1130
+ */
1131
+ }
1132
+ else {
1133
+ PyErr_SetString(PyExc_ValueError,
1134
+ "Iterator inputs must be ndarrays");
1135
+ return 0;
1136
+ }
1137
+
1138
+ return 1;
1139
+ }
1140
+
1141
+ /*
1142
+ * Process all the operands, copying new references so further processing
1143
+ * can replace the arrays if copying is necessary.
1144
+ */
1145
+ static int
1146
+ npyiter_prepare_operands(int nop, PyArrayObject **op_in,
1147
+ PyArrayObject **op,
1148
+ char **op_dataptr,
1149
+ PyArray_Descr **op_request_dtypes,
1150
+ PyArray_Descr **op_dtype,
1151
+ npy_uint32 flags,
1152
+ npy_uint32 *op_flags, npyiter_opitflags *op_itflags,
1153
+ npy_int8 *out_maskop)
1154
+ {
1155
+ int iop, i;
1156
+ npy_int8 maskop = -1;
1157
+ int any_writemasked_ops = 0;
1158
+
1159
+ /*
1160
+ * Here we just prepare the provided operands.
1161
+ */
1162
+ for (iop = 0; iop < nop; ++iop) {
1163
+ op[iop] = op_in[iop];
1164
+ Py_XINCREF(op[iop]);
1165
+ op_dtype[iop] = NULL;
1166
+
1167
+ /* Check the readonly/writeonly flags, and fill in op_itflags */
1168
+ if (!npyiter_check_per_op_flags(op_flags[iop], &op_itflags[iop])) {
1169
+ goto fail_iop;
1170
+ }
1171
+
1172
+ /* Extract the operand which is for masked iteration */
1173
+ if ((op_flags[iop] & NPY_ITER_ARRAYMASK) != 0) {
1174
+ if (maskop != -1) {
1175
+ PyErr_SetString(PyExc_ValueError,
1176
+ "Only one iterator operand may receive an "
1177
+ "ARRAYMASK flag");
1178
+ goto fail_iop;
1179
+ }
1180
+
1181
+ maskop = iop;
1182
+ *out_maskop = iop;
1183
+ }
1184
+
1185
+ if (op_flags[iop] & NPY_ITER_WRITEMASKED) {
1186
+ any_writemasked_ops = 1;
1187
+ }
1188
+
1189
+ /*
1190
+ * Prepare the operand. This produces an op_dtype[iop] reference
1191
+ * on success.
1192
+ */
1193
+ if (!npyiter_prepare_one_operand(&op[iop],
1194
+ &op_dataptr[iop],
1195
+ op_request_dtypes ? op_request_dtypes[iop] : NULL,
1196
+ &op_dtype[iop],
1197
+ flags,
1198
+ op_flags[iop], &op_itflags[iop])) {
1199
+ goto fail_iop;
1200
+ }
1201
+ }
1202
+
1203
+ /* If all the operands were NULL, it's an error */
1204
+ if (op[0] == NULL) {
1205
+ int all_null = 1;
1206
+ for (iop = 1; iop < nop; ++iop) {
1207
+ if (op[iop] != NULL) {
1208
+ all_null = 0;
1209
+ break;
1210
+ }
1211
+ }
1212
+ if (all_null) {
1213
+ PyErr_SetString(PyExc_ValueError,
1214
+ "At least one iterator operand must be non-NULL");
1215
+ goto fail_nop;
1216
+ }
1217
+ }
1218
+
1219
+ if (any_writemasked_ops && maskop < 0) {
1220
+ PyErr_SetString(PyExc_ValueError,
1221
+ "An iterator operand was flagged as WRITEMASKED, "
1222
+ "but no ARRAYMASK operand was given to supply "
1223
+ "the mask");
1224
+ goto fail_nop;
1225
+ }
1226
+ else if (!any_writemasked_ops && maskop >= 0) {
1227
+ PyErr_SetString(PyExc_ValueError,
1228
+ "An iterator operand was flagged as the ARRAYMASK, "
1229
+ "but no WRITEMASKED operands were given to use "
1230
+ "the mask");
1231
+ goto fail_nop;
1232
+ }
1233
+
1234
+ return 1;
1235
+
1236
+ fail_nop:
1237
+ iop = nop;
1238
+ fail_iop:
1239
+ for (i = 0; i < iop; ++i) {
1240
+ Py_XDECREF(op[i]);
1241
+ Py_XDECREF(op_dtype[i]);
1242
+ }
1243
+ return 0;
1244
+ }
1245
+
1246
+ static const char *
1247
+ npyiter_casting_to_string(NPY_CASTING casting)
1248
+ {
1249
+ switch (casting) {
1250
+ case NPY_NO_CASTING:
1251
+ return "'no'";
1252
+ case NPY_EQUIV_CASTING:
1253
+ return "'equiv'";
1254
+ case NPY_SAFE_CASTING:
1255
+ return "'safe'";
1256
+ case NPY_SAME_KIND_CASTING:
1257
+ return "'same_kind'";
1258
+ case NPY_UNSAFE_CASTING:
1259
+ return "'unsafe'";
1260
+ default:
1261
+ return "<unknown>";
1262
+ }
1263
+ }
1264
+
1265
+
1266
+ static int
1267
+ npyiter_check_casting(int nop, PyArrayObject **op,
1268
+ PyArray_Descr **op_dtype,
1269
+ NPY_CASTING casting,
1270
+ npyiter_opitflags *op_itflags)
1271
+ {
1272
+ int iop;
1273
+
1274
+ for(iop = 0; iop < nop; ++iop) {
1275
+ NPY_IT_DBG_PRINT1("Iterator: Checking casting for operand %d\n",
1276
+ (int)iop);
1277
+ #if NPY_IT_DBG_TRACING
1278
+ printf("op: ");
1279
+ if (op[iop] != NULL) {
1280
+ PyObject_Print((PyObject *)PyArray_DESCR(op[iop]), stdout, 0);
1281
+ }
1282
+ else {
1283
+ printf("<null>");
1284
+ }
1285
+ printf(", iter: ");
1286
+ PyObject_Print((PyObject *)op_dtype[iop], stdout, 0);
1287
+ printf("\n");
1288
+ #endif
1289
+ /* If the types aren't equivalent, a cast is necessary */
1290
+ if (op[iop] != NULL && !PyArray_EquivTypes(PyArray_DESCR(op[iop]),
1291
+ op_dtype[iop])) {
1292
+ /* Check read (op -> temp) casting */
1293
+ if ((op_itflags[iop] & NPY_OP_ITFLAG_READ) &&
1294
+ !PyArray_CanCastArrayTo(op[iop],
1295
+ op_dtype[iop],
1296
+ casting)) {
1297
+ PyObject *errmsg;
1298
+ errmsg = PyUString_FromFormat(
1299
+ "Iterator operand %d dtype could not be cast from ",
1300
+ (int)iop);
1301
+ PyUString_ConcatAndDel(&errmsg,
1302
+ PyObject_Repr((PyObject *)PyArray_DESCR(op[iop])));
1303
+ PyUString_ConcatAndDel(&errmsg,
1304
+ PyUString_FromString(" to "));
1305
+ PyUString_ConcatAndDel(&errmsg,
1306
+ PyObject_Repr((PyObject *)op_dtype[iop]));
1307
+ PyUString_ConcatAndDel(&errmsg,
1308
+ PyUString_FromFormat(" according to the rule %s",
1309
+ npyiter_casting_to_string(casting)));
1310
+ PyErr_SetObject(PyExc_TypeError, errmsg);
1311
+ Py_DECREF(errmsg);
1312
+ return 0;
1313
+ }
1314
+ /* Check write (temp -> op) casting */
1315
+ if ((op_itflags[iop] & NPY_OP_ITFLAG_WRITE) &&
1316
+ !PyArray_CanCastTypeTo(op_dtype[iop],
1317
+ PyArray_DESCR(op[iop]),
1318
+ casting)) {
1319
+ PyObject *errmsg;
1320
+ errmsg = PyUString_FromString(
1321
+ "Iterator requested dtype could not be cast from ");
1322
+ PyUString_ConcatAndDel(&errmsg,
1323
+ PyObject_Repr((PyObject *)op_dtype[iop]));
1324
+ PyUString_ConcatAndDel(&errmsg,
1325
+ PyUString_FromString(" to "));
1326
+ PyUString_ConcatAndDel(&errmsg,
1327
+ PyObject_Repr((PyObject *)PyArray_DESCR(op[iop])));
1328
+ PyUString_ConcatAndDel(&errmsg,
1329
+ PyUString_FromFormat(", the operand %d dtype, "
1330
+ "according to the rule %s",
1331
+ (int)iop,
1332
+ npyiter_casting_to_string(casting)));
1333
+ PyErr_SetObject(PyExc_TypeError, errmsg);
1334
+ Py_DECREF(errmsg);
1335
+ return 0;
1336
+ }
1337
+
1338
+ NPY_IT_DBG_PRINT("Iterator: Setting NPY_OP_ITFLAG_CAST "
1339
+ "because the types aren't equivalent\n");
1340
+ /* Indicate that this operand needs casting */
1341
+ op_itflags[iop] |= NPY_OP_ITFLAG_CAST;
1342
+ }
1343
+ }
1344
+
1345
+ return 1;
1346
+ }
1347
+
1348
+ /*
1349
+ * Checks that the mask broadcasts to the WRITEMASK REDUCE
1350
+ * operand 'iop', but 'iop' never broadcasts to the mask.
1351
+ * If 'iop' broadcasts to the mask, the result would be more
1352
+ * than one mask value per reduction element, something which
1353
+ * is invalid.
1354
+ *
1355
+ * This check should only be called after all the operands
1356
+ * have been filled in.
1357
+ *
1358
+ * Returns 1 on success, 0 on error.
1359
+ */
1360
+ static int
1361
+ check_mask_for_writemasked_reduction(NpyIter *iter, int iop)
1362
+ {
1363
+ npy_uint32 itflags = NIT_ITFLAGS(iter);
1364
+ int idim, ndim = NIT_NDIM(iter);
1365
+ int nop = NIT_NOP(iter);
1366
+ int maskop = NIT_MASKOP(iter);
1367
+
1368
+ NpyIter_AxisData *axisdata;
1369
+ npy_intp sizeof_axisdata;
1370
+
1371
+ axisdata = NIT_AXISDATA(iter);
1372
+ sizeof_axisdata = NIT_AXISDATA_SIZEOF(itflags, ndim, nop);
1373
+
1374
+ for(idim = 0; idim < ndim; ++idim) {
1375
+ npy_intp maskstride, istride;
1376
+
1377
+ istride = NAD_STRIDES(axisdata)[iop];
1378
+ maskstride = NAD_STRIDES(axisdata)[maskop];
1379
+
1380
+ /*
1381
+ * If 'iop' is being broadcast to 'maskop', we have
1382
+ * the invalid situation described above.
1383
+ */
1384
+ if (maskstride != 0 && istride == 0) {
1385
+ PyErr_SetString(PyExc_ValueError,
1386
+ "Iterator reduction operand is WRITEMASKED, "
1387
+ "but also broadcasts to multiple mask values. "
1388
+ "There can be only one mask value per WRITEMASKED "
1389
+ "element.");
1390
+ return 0;
1391
+ }
1392
+
1393
+ NIT_ADVANCE_AXISDATA(axisdata, 1);
1394
+ }
1395
+
1396
+ return 1;
1397
+ }
1398
+
1399
+ /*
1400
+ * Fills in the AXISDATA for the 'nop' operands, broadcasting
1401
+ * the dimensionas as necessary. Also fills
1402
+ * in the ITERSIZE data member.
1403
+ *
1404
+ * If op_axes is not NULL, it should point to an array of ndim-sized
1405
+ * arrays, one for each op.
1406
+ *
1407
+ * Returns 1 on success, 0 on failure.
1408
+ */
1409
+ static int
1410
+ npyiter_fill_axisdata(NpyIter *iter, npy_uint32 flags, npyiter_opitflags *op_itflags,
1411
+ char **op_dataptr,
1412
+ npy_uint32 *op_flags, int **op_axes,
1413
+ npy_intp *itershape)
1414
+ {
1415
+ npy_uint32 itflags = NIT_ITFLAGS(iter);
1416
+ int idim, ndim = NIT_NDIM(iter);
1417
+ int iop, nop = NIT_NOP(iter);
1418
+ int maskop = NIT_MASKOP(iter);
1419
+
1420
+ int ondim;
1421
+ NpyIter_AxisData *axisdata;
1422
+ npy_intp sizeof_axisdata;
1423
+ PyArrayObject **op = NIT_OPERANDS(iter), *op_cur;
1424
+ npy_intp broadcast_shape[NPY_MAXDIMS];
1425
+
1426
+ /* First broadcast the shapes together */
1427
+ if (itershape == NULL) {
1428
+ for (idim = 0; idim < ndim; ++idim) {
1429
+ broadcast_shape[idim] = 1;
1430
+ }
1431
+ }
1432
+ else {
1433
+ for (idim = 0; idim < ndim; ++idim) {
1434
+ broadcast_shape[idim] = itershape[idim];
1435
+ /* Negative shape entries are deduced from the operands */
1436
+ if (broadcast_shape[idim] < 0) {
1437
+ broadcast_shape[idim] = 1;
1438
+ }
1439
+ }
1440
+ }
1441
+ for (iop = 0; iop < nop; ++iop) {
1442
+ op_cur = op[iop];
1443
+ if (op_cur != NULL) {
1444
+ npy_intp *shape = PyArray_DIMS(op_cur);
1445
+ ondim = PyArray_NDIM(op_cur);
1446
+
1447
+ if (op_axes == NULL || op_axes[iop] == NULL) {
1448
+ /*
1449
+ * Possible if op_axes are being used, but
1450
+ * op_axes[iop] is NULL
1451
+ */
1452
+ if (ondim > ndim) {
1453
+ PyErr_SetString(PyExc_ValueError,
1454
+ "input operand has more dimensions than allowed "
1455
+ "by the axis remapping");
1456
+ return 0;
1457
+ }
1458
+ for (idim = 0; idim < ondim; ++idim) {
1459
+ npy_intp bshape = broadcast_shape[idim+ndim-ondim],
1460
+ op_shape = shape[idim];
1461
+ if (bshape == 1) {
1462
+ broadcast_shape[idim+ndim-ondim] = op_shape;
1463
+ }
1464
+ else if (bshape != op_shape && op_shape != 1) {
1465
+ goto broadcast_error;
1466
+ }
1467
+ }
1468
+ }
1469
+ else {
1470
+ int *axes = op_axes[iop];
1471
+ for (idim = 0; idim < ndim; ++idim) {
1472
+ int i = axes[idim];
1473
+ if (i >= 0) {
1474
+ if (i < ondim) {
1475
+ npy_intp bshape = broadcast_shape[idim],
1476
+ op_shape = shape[i];
1477
+ if (bshape == 1) {
1478
+ broadcast_shape[idim] = op_shape;
1479
+ }
1480
+ else if (bshape != op_shape && op_shape != 1) {
1481
+ goto broadcast_error;
1482
+ }
1483
+ }
1484
+ else {
1485
+ PyErr_Format(PyExc_ValueError,
1486
+ "Iterator input op_axes[%d][%d] (==%d) "
1487
+ "is not a valid axis of op[%d], which "
1488
+ "has %d dimensions ",
1489
+ (int)iop, (int)(ndim-idim-1), (int)i,
1490
+ (int)iop, (int)ondim);
1491
+ return 0;
1492
+ }
1493
+ }
1494
+ }
1495
+ }
1496
+ }
1497
+ }
1498
+ /*
1499
+ * If a shape was provided with a 1 entry, make sure that entry didn't
1500
+ * get expanded by broadcasting.
1501
+ */
1502
+ if (itershape != NULL) {
1503
+ for (idim = 0; idim < ndim; ++idim) {
1504
+ if (itershape[idim] == 1 && broadcast_shape[idim] != 1) {
1505
+ goto broadcast_error;
1506
+ }
1507
+ }
1508
+ }
1509
+
1510
+ axisdata = NIT_AXISDATA(iter);
1511
+ sizeof_axisdata = NIT_AXISDATA_SIZEOF(itflags, ndim, nop);
1512
+
1513
+ if (ndim == 0) {
1514
+ /* Need to fill the first axisdata, even if the iterator is 0-d */
1515
+ NAD_SHAPE(axisdata) = 1;
1516
+ NAD_INDEX(axisdata) = 0;
1517
+ memcpy(NAD_PTRS(axisdata), op_dataptr, NPY_SIZEOF_INTP*nop);
1518
+ memset(NAD_STRIDES(axisdata), 0, NPY_SIZEOF_INTP*nop);
1519
+ }
1520
+
1521
+ /* Now process the operands, filling in the axisdata */
1522
+ for (idim = 0; idim < ndim; ++idim) {
1523
+ npy_intp bshape = broadcast_shape[ndim-idim-1];
1524
+ npy_intp *strides = NAD_STRIDES(axisdata);
1525
+
1526
+ NAD_SHAPE(axisdata) = bshape;
1527
+ NAD_INDEX(axisdata) = 0;
1528
+ memcpy(NAD_PTRS(axisdata), op_dataptr, NPY_SIZEOF_INTP*nop);
1529
+
1530
+ for (iop = 0; iop < nop; ++iop) {
1531
+ op_cur = op[iop];
1532
+
1533
+ if (op_axes == NULL || op_axes[iop] == NULL) {
1534
+ if (op_cur == NULL) {
1535
+ strides[iop] = 0;
1536
+ }
1537
+ else {
1538
+ ondim = PyArray_NDIM(op_cur);
1539
+ if (bshape == 1) {
1540
+ strides[iop] = 0;
1541
+ if (idim >= ondim &&
1542
+ (op_flags[iop] & NPY_ITER_NO_BROADCAST)) {
1543
+ goto operand_different_than_broadcast;
1544
+ }
1545
+ }
1546
+ else if (idim >= ondim ||
1547
+ PyArray_DIM(op_cur, ondim-idim-1) == 1) {
1548
+ strides[iop] = 0;
1549
+ if (op_flags[iop] & NPY_ITER_NO_BROADCAST) {
1550
+ goto operand_different_than_broadcast;
1551
+ }
1552
+ /* If it's writeable, this means a reduction */
1553
+ if (op_itflags[iop] & NPY_OP_ITFLAG_WRITE) {
1554
+ if (!(flags & NPY_ITER_REDUCE_OK)) {
1555
+ PyErr_SetString(PyExc_ValueError,
1556
+ "output operand requires a "
1557
+ "reduction, but reduction is "
1558
+ "not enabled");
1559
+ return 0;
1560
+ }
1561
+ if (!(op_itflags[iop] & NPY_OP_ITFLAG_READ)) {
1562
+ PyErr_SetString(PyExc_ValueError,
1563
+ "output operand requires a "
1564
+ "reduction, but is flagged as "
1565
+ "write-only, not read-write");
1566
+ return 0;
1567
+ }
1568
+ /*
1569
+ * The ARRAYMASK can't be a reduction, because
1570
+ * it would be possible to write back to the
1571
+ * array once when the ARRAYMASK says 'True',
1572
+ * then have the reduction on the ARRAYMASK
1573
+ * later flip to 'False', indicating that the
1574
+ * write back should never have been done,
1575
+ * and violating the strict masking semantics
1576
+ */
1577
+ if (iop == maskop) {
1578
+ PyErr_SetString(PyExc_ValueError,
1579
+ "output operand requires a "
1580
+ "reduction, but is flagged as "
1581
+ "the ARRAYMASK operand which "
1582
+ "is not permitted to be the "
1583
+ "result of a reduction");
1584
+ return 0;
1585
+ }
1586
+
1587
+ NIT_ITFLAGS(iter) |= NPY_ITFLAG_REDUCE;
1588
+ op_itflags[iop] |= NPY_OP_ITFLAG_REDUCE;
1589
+ }
1590
+ }
1591
+ else {
1592
+ strides[iop] = PyArray_STRIDE(op_cur, ondim-idim-1);
1593
+ }
1594
+ }
1595
+ }
1596
+ else {
1597
+ int *axes = op_axes[iop];
1598
+ int i = axes[ndim-idim-1];
1599
+ if (i >= 0) {
1600
+ if (bshape == 1 || op_cur == NULL) {
1601
+ strides[iop] = 0;
1602
+ }
1603
+ else if (PyArray_DIM(op_cur, i) == 1) {
1604
+ strides[iop] = 0;
1605
+ if (op_flags[iop] & NPY_ITER_NO_BROADCAST) {
1606
+ goto operand_different_than_broadcast;
1607
+ }
1608
+ /* If it's writeable, this means a reduction */
1609
+ if (op_itflags[iop] & NPY_OP_ITFLAG_WRITE) {
1610
+ if (!(flags & NPY_ITER_REDUCE_OK)) {
1611
+ PyErr_SetString(PyExc_ValueError,
1612
+ "output operand requires a reduction, but "
1613
+ "reduction is not enabled");
1614
+ return 0;
1615
+ }
1616
+ if (!(op_itflags[iop] & NPY_OP_ITFLAG_READ)) {
1617
+ PyErr_SetString(PyExc_ValueError,
1618
+ "output operand requires a reduction, but "
1619
+ "is flagged as write-only, not "
1620
+ "read-write");
1621
+ return 0;
1622
+ }
1623
+ NIT_ITFLAGS(iter) |= NPY_ITFLAG_REDUCE;
1624
+ op_itflags[iop] |= NPY_OP_ITFLAG_REDUCE;
1625
+ }
1626
+ }
1627
+ else {
1628
+ strides[iop] = PyArray_STRIDE(op_cur, i);
1629
+ }
1630
+ }
1631
+ else if (bshape == 1) {
1632
+ strides[iop] = 0;
1633
+ }
1634
+ else {
1635
+ strides[iop] = 0;
1636
+ /* If it's writeable, this means a reduction */
1637
+ if (op_itflags[iop] & NPY_OP_ITFLAG_WRITE) {
1638
+ if (!(flags & NPY_ITER_REDUCE_OK)) {
1639
+ PyErr_SetString(PyExc_ValueError,
1640
+ "output operand requires a reduction, but "
1641
+ "reduction is not enabled");
1642
+ return 0;
1643
+ }
1644
+ if (!(op_itflags[iop] & NPY_OP_ITFLAG_READ)) {
1645
+ PyErr_SetString(PyExc_ValueError,
1646
+ "output operand requires a reduction, but "
1647
+ "is flagged as write-only, not "
1648
+ "read-write");
1649
+ return 0;
1650
+ }
1651
+ NIT_ITFLAGS(iter) |= NPY_ITFLAG_REDUCE;
1652
+ op_itflags[iop] |= NPY_OP_ITFLAG_REDUCE;
1653
+ }
1654
+ }
1655
+ }
1656
+ }
1657
+
1658
+ NIT_ADVANCE_AXISDATA(axisdata, 1);
1659
+ }
1660
+
1661
+ /* Now fill in the ITERSIZE member */
1662
+ NIT_ITERSIZE(iter) = 1;
1663
+ for (idim = 0; idim < ndim; ++idim) {
1664
+ if (npy_mul_with_overflow_intp(&NIT_ITERSIZE(iter),
1665
+ NIT_ITERSIZE(iter), broadcast_shape[idim])) {
1666
+ if ((itflags & NPY_ITFLAG_HASMULTIINDEX) &&
1667
+ !(itflags & NPY_ITFLAG_HASINDEX) &&
1668
+ !(itflags & NPY_ITFLAG_BUFFER)) {
1669
+ /*
1670
+ * If RemoveAxis may be called, the size check is delayed
1671
+ * until either the multi index is removed, or GetIterNext
1672
+ * is called.
1673
+ */
1674
+ NIT_ITERSIZE(iter) = -1;
1675
+ break;
1676
+ }
1677
+ else {
1678
+ PyErr_SetString(PyExc_ValueError, "iterator is too large");
1679
+ return 0;
1680
+ }
1681
+ }
1682
+ }
1683
+ /* The range defaults to everything */
1684
+ NIT_ITERSTART(iter) = 0;
1685
+ NIT_ITEREND(iter) = NIT_ITERSIZE(iter);
1686
+
1687
+ return 1;
1688
+
1689
+ broadcast_error: {
1690
+ PyObject *errmsg, *tmp;
1691
+ npy_intp remdims[NPY_MAXDIMS];
1692
+ char *tmpstr;
1693
+
1694
+ if (op_axes == NULL) {
1695
+ errmsg = PyUString_FromString("operands could not be broadcast "
1696
+ "together with shapes ");
1697
+ if (errmsg == NULL) {
1698
+ return 0;
1699
+ }
1700
+ for (iop = 0; iop < nop; ++iop) {
1701
+ if (op[iop] != NULL) {
1702
+ tmp = convert_shape_to_string(PyArray_NDIM(op[iop]),
1703
+ PyArray_DIMS(op[iop]),
1704
+ " ");
1705
+ if (tmp == NULL) {
1706
+ Py_DECREF(errmsg);
1707
+ return 0;
1708
+ }
1709
+ PyUString_ConcatAndDel(&errmsg, tmp);
1710
+ if (errmsg == NULL) {
1711
+ return 0;
1712
+ }
1713
+ }
1714
+ }
1715
+ if (itershape != NULL) {
1716
+ tmp = PyUString_FromString("and requested shape ");
1717
+ if (tmp == NULL) {
1718
+ Py_DECREF(errmsg);
1719
+ return 0;
1720
+ }
1721
+ PyUString_ConcatAndDel(&errmsg, tmp);
1722
+ if (errmsg == NULL) {
1723
+ return 0;
1724
+ }
1725
+
1726
+ tmp = convert_shape_to_string(ndim, itershape, "");
1727
+ if (tmp == NULL) {
1728
+ Py_DECREF(errmsg);
1729
+ return 0;
1730
+ }
1731
+ PyUString_ConcatAndDel(&errmsg, tmp);
1732
+ if (errmsg == NULL) {
1733
+ return 0;
1734
+ }
1735
+
1736
+ }
1737
+ PyErr_SetObject(PyExc_ValueError, errmsg);
1738
+ Py_DECREF(errmsg);
1739
+ }
1740
+ else {
1741
+ errmsg = PyUString_FromString("operands could not be broadcast "
1742
+ "together with remapped shapes "
1743
+ "[original->remapped]: ");
1744
+ for (iop = 0; iop < nop; ++iop) {
1745
+ if (op[iop] != NULL) {
1746
+ int *axes = op_axes[iop];
1747
+
1748
+ tmpstr = (axes == NULL) ? " " : "->";
1749
+ tmp = convert_shape_to_string(PyArray_NDIM(op[iop]),
1750
+ PyArray_DIMS(op[iop]),
1751
+ tmpstr);
1752
+ if (tmp == NULL) {
1753
+ return 0;
1754
+ }
1755
+ PyUString_ConcatAndDel(&errmsg, tmp);
1756
+ if (errmsg == NULL) {
1757
+ return 0;
1758
+ }
1759
+
1760
+ if (axes != NULL) {
1761
+ for (idim = 0; idim < ndim; ++idim) {
1762
+ npy_intp i = axes[idim];
1763
+
1764
+ if (i >= 0 && i < PyArray_NDIM(op[iop])) {
1765
+ remdims[idim] = PyArray_DIM(op[iop], i);
1766
+ }
1767
+ else {
1768
+ remdims[idim] = -1;
1769
+ }
1770
+ }
1771
+ tmp = convert_shape_to_string(ndim, remdims, " ");
1772
+ if (tmp == NULL) {
1773
+ return 0;
1774
+ }
1775
+ PyUString_ConcatAndDel(&errmsg, tmp);
1776
+ if (errmsg == NULL) {
1777
+ return 0;
1778
+ }
1779
+ }
1780
+ }
1781
+ }
1782
+ if (itershape != NULL) {
1783
+ tmp = PyUString_FromString("and requested shape ");
1784
+ if (tmp == NULL) {
1785
+ Py_DECREF(errmsg);
1786
+ return 0;
1787
+ }
1788
+ PyUString_ConcatAndDel(&errmsg, tmp);
1789
+ if (errmsg == NULL) {
1790
+ return 0;
1791
+ }
1792
+
1793
+ tmp = convert_shape_to_string(ndim, itershape, "");
1794
+ if (tmp == NULL) {
1795
+ Py_DECREF(errmsg);
1796
+ return 0;
1797
+ }
1798
+ PyUString_ConcatAndDel(&errmsg, tmp);
1799
+ if (errmsg == NULL) {
1800
+ return 0;
1801
+ }
1802
+
1803
+ }
1804
+ PyErr_SetObject(PyExc_ValueError, errmsg);
1805
+ Py_DECREF(errmsg);
1806
+ }
1807
+
1808
+ return 0;
1809
+ }
1810
+
1811
+ operand_different_than_broadcast: {
1812
+ npy_intp remdims[NPY_MAXDIMS];
1813
+ PyObject *errmsg, *tmp;
1814
+
1815
+ /* Start of error message */
1816
+ if (op_flags[iop] & NPY_ITER_READONLY) {
1817
+ errmsg = PyUString_FromString("non-broadcastable operand "
1818
+ "with shape ");
1819
+ }
1820
+ else {
1821
+ errmsg = PyUString_FromString("non-broadcastable output "
1822
+ "operand with shape ");
1823
+ }
1824
+ if (errmsg == NULL) {
1825
+ return 0;
1826
+ }
1827
+
1828
+ /* Operand shape */
1829
+ tmp = convert_shape_to_string(PyArray_NDIM(op[iop]),
1830
+ PyArray_DIMS(op[iop]), "");
1831
+ if (tmp == NULL) {
1832
+ return 0;
1833
+ }
1834
+ PyUString_ConcatAndDel(&errmsg, tmp);
1835
+ if (errmsg == NULL) {
1836
+ return 0;
1837
+ }
1838
+ /* Remapped operand shape */
1839
+ if (op_axes != NULL && op_axes[iop] != NULL) {
1840
+ int *axes = op_axes[iop];
1841
+
1842
+ for (idim = 0; idim < ndim; ++idim) {
1843
+ npy_intp i = axes[ndim-idim-1];
1844
+
1845
+ if (i >= 0 && i < PyArray_NDIM(op[iop])) {
1846
+ remdims[idim] = PyArray_DIM(op[iop], i);
1847
+ }
1848
+ else {
1849
+ remdims[idim] = -1;
1850
+ }
1851
+ }
1852
+
1853
+ tmp = PyUString_FromString(" [remapped to ");
1854
+ if (tmp == NULL) {
1855
+ return 0;
1856
+ }
1857
+ PyUString_ConcatAndDel(&errmsg, tmp);
1858
+ if (errmsg == NULL) {
1859
+ return 0;
1860
+ }
1861
+
1862
+ tmp = convert_shape_to_string(ndim, remdims, "]");
1863
+ if (tmp == NULL) {
1864
+ return 0;
1865
+ }
1866
+ PyUString_ConcatAndDel(&errmsg, tmp);
1867
+ if (errmsg == NULL) {
1868
+ return 0;
1869
+ }
1870
+ }
1871
+
1872
+ tmp = PyUString_FromString(" doesn't match the broadcast shape ");
1873
+ if (tmp == NULL) {
1874
+ return 0;
1875
+ }
1876
+ PyUString_ConcatAndDel(&errmsg, tmp);
1877
+ if (errmsg == NULL) {
1878
+ return 0;
1879
+ }
1880
+
1881
+ /* Broadcast shape */
1882
+ tmp = convert_shape_to_string(ndim, broadcast_shape, "");
1883
+ if (tmp == NULL) {
1884
+ return 0;
1885
+ }
1886
+ PyUString_ConcatAndDel(&errmsg, tmp);
1887
+ if (errmsg == NULL) {
1888
+ return 0;
1889
+ }
1890
+
1891
+ PyErr_SetObject(PyExc_ValueError, errmsg);
1892
+ Py_DECREF(errmsg);
1893
+
1894
+ return 0;
1895
+ }
1896
+ }
1897
+
1898
+ /*
1899
+ * Replaces the AXISDATA for the iop'th operand, broadcasting
1900
+ * the dimensions as necessary. Assumes the replacement array is
1901
+ * exactly the same shape as the original array used when
1902
+ * npy_fill_axisdata was called.
1903
+ *
1904
+ * If op_axes is not NULL, it should point to an ndim-sized
1905
+ * array.
1906
+ */
1907
+ static void
1908
+ npyiter_replace_axisdata(NpyIter *iter, int iop,
1909
+ PyArrayObject *op,
1910
+ int op_ndim, char *op_dataptr,
1911
+ int *op_axes)
1912
+ {
1913
+ npy_uint32 itflags = NIT_ITFLAGS(iter);
1914
+ int idim, ndim = NIT_NDIM(iter);
1915
+ int nop = NIT_NOP(iter);
1916
+
1917
+ NpyIter_AxisData *axisdata0, *axisdata;
1918
+ npy_intp sizeof_axisdata;
1919
+ npy_int8 *perm;
1920
+ npy_intp baseoffset = 0;
1921
+
1922
+ perm = NIT_PERM(iter);
1923
+ axisdata0 = NIT_AXISDATA(iter);
1924
+ sizeof_axisdata = NIT_AXISDATA_SIZEOF(itflags, ndim, nop);
1925
+
1926
+ /*
1927
+ * Replace just the strides which were non-zero, and compute
1928
+ * the base data address.
1929
+ */
1930
+ axisdata = axisdata0;
1931
+
1932
+ if (op_axes != NULL) {
1933
+ for (idim = 0; idim < ndim; ++idim, NIT_ADVANCE_AXISDATA(axisdata, 1)) {
1934
+ npy_int8 p;
1935
+ int i;
1936
+ npy_intp shape;
1937
+
1938
+ /* Apply the perm to get the original axis */
1939
+ p = perm[idim];
1940
+ if (p < 0) {
1941
+ i = op_axes[ndim+p];
1942
+ }
1943
+ else {
1944
+ i = op_axes[ndim-p-1];
1945
+ }
1946
+
1947
+ if (0 <= i && i < op_ndim) {
1948
+ shape = PyArray_DIM(op, i);
1949
+ if (shape != 1) {
1950
+ npy_intp stride = PyArray_STRIDE(op, i);
1951
+ if (p < 0) {
1952
+ /* If the perm entry is negative, flip the axis */
1953
+ NAD_STRIDES(axisdata)[iop] = -stride;
1954
+ baseoffset += stride*(shape-1);
1955
+ }
1956
+ else {
1957
+ NAD_STRIDES(axisdata)[iop] = stride;
1958
+ }
1959
+ }
1960
+ }
1961
+ }
1962
+ }
1963
+ else {
1964
+ for (idim = 0; idim < ndim; ++idim, NIT_ADVANCE_AXISDATA(axisdata, 1)) {
1965
+ npy_int8 p;
1966
+ int i;
1967
+ npy_intp shape;
1968
+
1969
+ /* Apply the perm to get the original axis */
1970
+ p = perm[idim];
1971
+ if (p < 0) {
1972
+ i = op_ndim+p;
1973
+ }
1974
+ else {
1975
+ i = op_ndim-p-1;
1976
+ }
1977
+
1978
+ if (i >= 0) {
1979
+ shape = PyArray_DIM(op, i);
1980
+ if (shape != 1) {
1981
+ npy_intp stride = PyArray_STRIDE(op, i);
1982
+ if (p < 0) {
1983
+ /* If the perm entry is negative, flip the axis */
1984
+ NAD_STRIDES(axisdata)[iop] = -stride;
1985
+ baseoffset += stride*(shape-1);
1986
+ }
1987
+ else {
1988
+ NAD_STRIDES(axisdata)[iop] = stride;
1989
+ }
1990
+ }
1991
+ }
1992
+ }
1993
+ }
1994
+
1995
+ op_dataptr += baseoffset;
1996
+
1997
+ /* Now the base data pointer is calculated, set it everywhere it's needed */
1998
+ NIT_RESETDATAPTR(iter)[iop] = op_dataptr;
1999
+ NIT_BASEOFFSETS(iter)[iop] = baseoffset;
2000
+ axisdata = axisdata0;
2001
+ /* Fill at least one axisdata, for the 0-d case */
2002
+ NAD_PTRS(axisdata)[iop] = op_dataptr;
2003
+ NIT_ADVANCE_AXISDATA(axisdata, 1);
2004
+ for (idim = 1; idim < ndim; ++idim, NIT_ADVANCE_AXISDATA(axisdata, 1)) {
2005
+ NAD_PTRS(axisdata)[iop] = op_dataptr;
2006
+ }
2007
+ }
2008
+
2009
+ /*
2010
+ * Computes the iterator's index strides and initializes the index values
2011
+ * to zero.
2012
+ *
2013
+ * This must be called before the axes (i.e. the AXISDATA array) may
2014
+ * be reordered.
2015
+ */
2016
+ static void
2017
+ npyiter_compute_index_strides(NpyIter *iter, npy_uint32 flags)
2018
+ {
2019
+ npy_uint32 itflags = NIT_ITFLAGS(iter);
2020
+ int idim, ndim = NIT_NDIM(iter);
2021
+ int nop = NIT_NOP(iter);
2022
+
2023
+ npy_intp indexstride;
2024
+ NpyIter_AxisData *axisdata;
2025
+ npy_intp sizeof_axisdata;
2026
+
2027
+ /*
2028
+ * If there is only one element being iterated, we just have
2029
+ * to touch the first AXISDATA because nothing will ever be
2030
+ * incremented. This also initializes the data for the 0-d case.
2031
+ */
2032
+ if (NIT_ITERSIZE(iter) == 1) {
2033
+ if (itflags & NPY_ITFLAG_HASINDEX) {
2034
+ axisdata = NIT_AXISDATA(iter);
2035
+ NAD_PTRS(axisdata)[nop] = 0;
2036
+ }
2037
+ return;
2038
+ }
2039
+
2040
+ if (flags & NPY_ITER_C_INDEX) {
2041
+ sizeof_axisdata = NIT_AXISDATA_SIZEOF(itflags, ndim, nop);
2042
+ axisdata = NIT_AXISDATA(iter);
2043
+ indexstride = 1;
2044
+ for(idim = 0; idim < ndim; ++idim, NIT_ADVANCE_AXISDATA(axisdata, 1)) {
2045
+ npy_intp shape = NAD_SHAPE(axisdata);
2046
+
2047
+ if (shape == 1) {
2048
+ NAD_STRIDES(axisdata)[nop] = 0;
2049
+ }
2050
+ else {
2051
+ NAD_STRIDES(axisdata)[nop] = indexstride;
2052
+ }
2053
+ NAD_PTRS(axisdata)[nop] = 0;
2054
+ indexstride *= shape;
2055
+ }
2056
+ }
2057
+ else if (flags & NPY_ITER_F_INDEX) {
2058
+ sizeof_axisdata = NIT_AXISDATA_SIZEOF(itflags, ndim, nop);
2059
+ axisdata = NIT_INDEX_AXISDATA(NIT_AXISDATA(iter), ndim-1);
2060
+ indexstride = 1;
2061
+ for(idim = 0; idim < ndim; ++idim, NIT_ADVANCE_AXISDATA(axisdata, -1)) {
2062
+ npy_intp shape = NAD_SHAPE(axisdata);
2063
+
2064
+ if (shape == 1) {
2065
+ NAD_STRIDES(axisdata)[nop] = 0;
2066
+ }
2067
+ else {
2068
+ NAD_STRIDES(axisdata)[nop] = indexstride;
2069
+ }
2070
+ NAD_PTRS(axisdata)[nop] = 0;
2071
+ indexstride *= shape;
2072
+ }
2073
+ }
2074
+ }
2075
+
2076
+ /*
2077
+ * If the order is NPY_KEEPORDER, lets the iterator find the best
2078
+ * iteration order, otherwise forces it. Indicates in the itflags that
2079
+ * whether the iteration order was forced.
2080
+ */
2081
+ static void
2082
+ npyiter_apply_forced_iteration_order(NpyIter *iter, NPY_ORDER order)
2083
+ {
2084
+ /*npy_uint32 itflags = NIT_ITFLAGS(iter);*/
2085
+ int ndim = NIT_NDIM(iter);
2086
+ int iop, nop = NIT_NOP(iter);
2087
+
2088
+ switch (order) {
2089
+ case NPY_CORDER:
2090
+ NIT_ITFLAGS(iter) |= NPY_ITFLAG_FORCEDORDER;
2091
+ break;
2092
+ case NPY_FORTRANORDER:
2093
+ NIT_ITFLAGS(iter) |= NPY_ITFLAG_FORCEDORDER;
2094
+ /* Only need to actually do something if there is more than 1 dim */
2095
+ if (ndim > 1) {
2096
+ npyiter_reverse_axis_ordering(iter);
2097
+ }
2098
+ break;
2099
+ case NPY_ANYORDER:
2100
+ NIT_ITFLAGS(iter) |= NPY_ITFLAG_FORCEDORDER;
2101
+ /* Only need to actually do something if there is more than 1 dim */
2102
+ if (ndim > 1) {
2103
+ PyArrayObject **op = NIT_OPERANDS(iter);
2104
+ int forder = 1;
2105
+
2106
+ /* Check that all the array inputs are fortran order */
2107
+ for (iop = 0; iop < nop; ++iop, ++op) {
2108
+ if (*op && !PyArray_CHKFLAGS(*op, NPY_ARRAY_F_CONTIGUOUS)) {
2109
+ forder = 0;
2110
+ break;
2111
+ }
2112
+ }
2113
+
2114
+ if (forder) {
2115
+ npyiter_reverse_axis_ordering(iter);
2116
+ }
2117
+ }
2118
+ break;
2119
+ case NPY_KEEPORDER:
2120
+ /* Don't set the forced order flag here... */
2121
+ break;
2122
+ }
2123
+ }
2124
+
2125
+ /*
2126
+ * This function negates any strides in the iterator
2127
+ * which are negative. When iterating more than one
2128
+ * object, it only flips strides when they are all
2129
+ * negative or zero.
2130
+ */
2131
+ static void
2132
+ npyiter_flip_negative_strides(NpyIter *iter)
2133
+ {
2134
+ npy_uint32 itflags = NIT_ITFLAGS(iter);
2135
+ int idim, ndim = NIT_NDIM(iter);
2136
+ int iop, nop = NIT_NOP(iter);
2137
+
2138
+ npy_intp istrides, nstrides = NAD_NSTRIDES();
2139
+ NpyIter_AxisData *axisdata, *axisdata0;
2140
+ npy_intp *baseoffsets;
2141
+ npy_intp sizeof_axisdata = NIT_AXISDATA_SIZEOF(itflags, ndim, nop);
2142
+ int any_flipped = 0;
2143
+
2144
+ axisdata0 = axisdata = NIT_AXISDATA(iter);
2145
+ baseoffsets = NIT_BASEOFFSETS(iter);
2146
+ for (idim = 0; idim < ndim; ++idim, NIT_ADVANCE_AXISDATA(axisdata, 1)) {
2147
+ npy_intp *strides = NAD_STRIDES(axisdata);
2148
+ int any_negative = 0;
2149
+
2150
+ /*
2151
+ * Check the signs of all the operand strides.
2152
+ */
2153
+ for (iop = 0; iop < nop; ++iop) {
2154
+ if (strides[iop] < 0) {
2155
+ any_negative = 1;
2156
+ }
2157
+ else if (strides[iop] != 0) {
2158
+ break;
2159
+ }
2160
+ }
2161
+ /*
2162
+ * If at least one stride is negative and none are positive,
2163
+ * flip all the strides for this dimension.
2164
+ */
2165
+ if (any_negative && iop == nop) {
2166
+ npy_intp shapem1 = NAD_SHAPE(axisdata) - 1;
2167
+
2168
+ for (istrides = 0; istrides < nstrides; ++istrides) {
2169
+ npy_intp stride = strides[istrides];
2170
+
2171
+ /* Adjust the base pointers to start at the end */
2172
+ baseoffsets[istrides] += shapem1 * stride;
2173
+ /* Flip the stride */
2174
+ strides[istrides] = -stride;
2175
+ }
2176
+ /*
2177
+ * Make the perm entry negative so get_multi_index
2178
+ * knows it's flipped
2179
+ */
2180
+ NIT_PERM(iter)[idim] = -1-NIT_PERM(iter)[idim];
2181
+
2182
+ any_flipped = 1;
2183
+ }
2184
+ }
2185
+
2186
+ /*
2187
+ * If any strides were flipped, the base pointers were adjusted
2188
+ * in the first AXISDATA, and need to be copied to all the rest
2189
+ */
2190
+ if (any_flipped) {
2191
+ char **resetdataptr = NIT_RESETDATAPTR(iter);
2192
+
2193
+ for (istrides = 0; istrides < nstrides; ++istrides) {
2194
+ resetdataptr[istrides] += baseoffsets[istrides];
2195
+ }
2196
+ axisdata = axisdata0;
2197
+ for (idim = 0; idim < ndim; ++idim, NIT_ADVANCE_AXISDATA(axisdata, 1)) {
2198
+ char **ptrs = NAD_PTRS(axisdata);
2199
+ for (istrides = 0; istrides < nstrides; ++istrides) {
2200
+ ptrs[istrides] = resetdataptr[istrides];
2201
+ }
2202
+ }
2203
+ /*
2204
+ * Indicate that some of the perm entries are negative,
2205
+ * and that it's not (strictly speaking) the identity perm.
2206
+ */
2207
+ NIT_ITFLAGS(iter) = (NIT_ITFLAGS(iter)|NPY_ITFLAG_NEGPERM) &
2208
+ ~NPY_ITFLAG_IDENTPERM;
2209
+ }
2210
+ }
2211
+
2212
+ static void
2213
+ npyiter_reverse_axis_ordering(NpyIter *iter)
2214
+ {
2215
+ npy_uint32 itflags = NIT_ITFLAGS(iter);
2216
+ int ndim = NIT_NDIM(iter);
2217
+ int nop = NIT_NOP(iter);
2218
+
2219
+ npy_intp i, temp, size;
2220
+ npy_intp *first, *last;
2221
+ npy_int8 *perm;
2222
+
2223
+ size = NIT_AXISDATA_SIZEOF(itflags, ndim, nop)/NPY_SIZEOF_INTP;
2224
+ first = (npy_intp*)NIT_AXISDATA(iter);
2225
+ last = first + (ndim-1)*size;
2226
+
2227
+ /* This loop reverses the order of the AXISDATA array */
2228
+ while (first < last) {
2229
+ for (i = 0; i < size; ++i) {
2230
+ temp = first[i];
2231
+ first[i] = last[i];
2232
+ last[i] = temp;
2233
+ }
2234
+ first += size;
2235
+ last -= size;
2236
+ }
2237
+
2238
+ /* Store the perm we applied */
2239
+ perm = NIT_PERM(iter);
2240
+ for(i = ndim-1; i >= 0; --i, ++perm) {
2241
+ *perm = (npy_int8)i;
2242
+ }
2243
+
2244
+ NIT_ITFLAGS(iter) &= ~NPY_ITFLAG_IDENTPERM;
2245
+ }
2246
+
2247
+ static NPY_INLINE npy_intp
2248
+ intp_abs(npy_intp x)
2249
+ {
2250
+ return (x < 0) ? -x : x;
2251
+ }
2252
+
2253
+ static void
2254
+ npyiter_find_best_axis_ordering(NpyIter *iter)
2255
+ {
2256
+ npy_uint32 itflags = NIT_ITFLAGS(iter);
2257
+ int idim, ndim = NIT_NDIM(iter);
2258
+ int iop, nop = NIT_NOP(iter);
2259
+
2260
+ npy_intp ax_i0, ax_i1, ax_ipos;
2261
+ npy_int8 ax_j0, ax_j1;
2262
+ npy_int8 *perm;
2263
+ NpyIter_AxisData *axisdata = NIT_AXISDATA(iter);
2264
+ npy_intp sizeof_axisdata = NIT_AXISDATA_SIZEOF(itflags, ndim, nop);
2265
+ int permuted = 0;
2266
+
2267
+ perm = NIT_PERM(iter);
2268
+
2269
+ /*
2270
+ * Do a custom stable insertion sort. Note that because
2271
+ * the AXISDATA has been reversed from C order, this
2272
+ * is sorting from smallest stride to biggest stride.
2273
+ */
2274
+ for (ax_i0 = 1; ax_i0 < ndim; ++ax_i0) {
2275
+ npy_intp *strides0;
2276
+
2277
+ /* 'ax_ipos' is where perm[ax_i0] will get inserted */
2278
+ ax_ipos = ax_i0;
2279
+ ax_j0 = perm[ax_i0];
2280
+
2281
+ strides0 = NAD_STRIDES(NIT_INDEX_AXISDATA(axisdata, ax_j0));
2282
+ for (ax_i1 = ax_i0-1; ax_i1 >= 0; --ax_i1) {
2283
+ int ambig = 1, shouldswap = 0;
2284
+ npy_intp *strides1;
2285
+
2286
+ ax_j1 = perm[ax_i1];
2287
+
2288
+ strides1 = NAD_STRIDES(NIT_INDEX_AXISDATA(axisdata, ax_j1));
2289
+
2290
+ for (iop = 0; iop < nop; ++iop) {
2291
+ if (strides0[iop] != 0 && strides1[iop] != 0) {
2292
+ if (intp_abs(strides1[iop]) <=
2293
+ intp_abs(strides0[iop])) {
2294
+ /*
2295
+ * Set swap even if it's not ambiguous already,
2296
+ * because in the case of conflicts between
2297
+ * different operands, C-order wins.
2298
+ */
2299
+ shouldswap = 0;
2300
+ }
2301
+ else {
2302
+ /* Only set swap if it's still ambiguous */
2303
+ if (ambig) {
2304
+ shouldswap = 1;
2305
+ }
2306
+ }
2307
+
2308
+ /*
2309
+ * A comparison has been done, so it's
2310
+ * no longer ambiguous
2311
+ */
2312
+ ambig = 0;
2313
+ }
2314
+ }
2315
+ /*
2316
+ * If the comparison was unambiguous, either shift
2317
+ * 'ax_ipos' to 'ax_i1' or stop looking for an insertion
2318
+ * point
2319
+ */
2320
+ if (!ambig) {
2321
+ if (shouldswap) {
2322
+ ax_ipos = ax_i1;
2323
+ }
2324
+ else {
2325
+ break;
2326
+ }
2327
+ }
2328
+ }
2329
+
2330
+ /* Insert perm[ax_i0] into the right place */
2331
+ if (ax_ipos != ax_i0) {
2332
+ for (ax_i1 = ax_i0; ax_i1 > ax_ipos; --ax_i1) {
2333
+ perm[ax_i1] = perm[ax_i1-1];
2334
+ }
2335
+ perm[ax_ipos] = ax_j0;
2336
+ permuted = 1;
2337
+ }
2338
+ }
2339
+
2340
+ /* Apply the computed permutation to the AXISDATA array */
2341
+ if (permuted == 1) {
2342
+ npy_intp i, size = sizeof_axisdata/NPY_SIZEOF_INTP;
2343
+ NpyIter_AxisData *ad_i;
2344
+
2345
+ /* Use the index as a flag, set each to 1 */
2346
+ ad_i = axisdata;
2347
+ for (idim = 0; idim < ndim; ++idim, NIT_ADVANCE_AXISDATA(ad_i, 1)) {
2348
+ NAD_INDEX(ad_i) = 1;
2349
+ }
2350
+ /* Apply the permutation by following the cycles */
2351
+ for (idim = 0; idim < ndim; ++idim) {
2352
+ ad_i = NIT_INDEX_AXISDATA(axisdata, idim);
2353
+
2354
+ /* If this axis hasn't been touched yet, process it */
2355
+ if (NAD_INDEX(ad_i) == 1) {
2356
+ npy_int8 pidim = perm[idim];
2357
+ npy_intp tmp;
2358
+ NpyIter_AxisData *ad_p, *ad_q;
2359
+
2360
+ if (pidim != idim) {
2361
+ /* Follow the cycle, copying the data */
2362
+ for (i = 0; i < size; ++i) {
2363
+ pidim = perm[idim];
2364
+ ad_q = ad_i;
2365
+ tmp = *((npy_intp*)ad_q + i);
2366
+ while (pidim != idim) {
2367
+ ad_p = NIT_INDEX_AXISDATA(axisdata, pidim);
2368
+ *((npy_intp*)ad_q + i) = *((npy_intp*)ad_p + i);
2369
+
2370
+ ad_q = ad_p;
2371
+ pidim = perm[(int)pidim];
2372
+ }
2373
+ *((npy_intp*)ad_q + i) = tmp;
2374
+ }
2375
+ /* Follow the cycle again, marking it as done */
2376
+ pidim = perm[idim];
2377
+
2378
+ while (pidim != idim) {
2379
+ NAD_INDEX(NIT_INDEX_AXISDATA(axisdata, pidim)) = 0;
2380
+ pidim = perm[(int)pidim];
2381
+ }
2382
+ }
2383
+ NAD_INDEX(ad_i) = 0;
2384
+ }
2385
+ }
2386
+ /* Clear the identity perm flag */
2387
+ NIT_ITFLAGS(iter) &= ~NPY_ITFLAG_IDENTPERM;
2388
+ }
2389
+ }
2390
+
2391
+ /*
2392
+ * Calculates a dtype that all the types can be promoted to, using the
2393
+ * ufunc rules. If only_inputs is 1, it leaves any operands that
2394
+ * are not read from out of the calculation.
2395
+ */
2396
+ static PyArray_Descr *
2397
+ npyiter_get_common_dtype(int nop, PyArrayObject **op,
2398
+ npyiter_opitflags *op_itflags, PyArray_Descr **op_dtype,
2399
+ PyArray_Descr **op_request_dtypes,
2400
+ int only_inputs)
2401
+ {
2402
+ int iop;
2403
+ npy_intp narrs = 0, ndtypes = 0;
2404
+ PyArrayObject *arrs[NPY_MAXARGS];
2405
+ PyArray_Descr *dtypes[NPY_MAXARGS];
2406
+ PyArray_Descr *ret;
2407
+
2408
+ NPY_IT_DBG_PRINT("Iterator: Getting a common data type from operands\n");
2409
+
2410
+ for (iop = 0; iop < nop; ++iop) {
2411
+ if (op_dtype[iop] != NULL &&
2412
+ (!only_inputs || (op_itflags[iop] & NPY_OP_ITFLAG_READ))) {
2413
+ /* If no dtype was requested and the op is a scalar, pass the op */
2414
+ if ((op_request_dtypes == NULL ||
2415
+ op_request_dtypes[iop] == NULL) &&
2416
+ PyArray_NDIM(op[iop]) == 0) {
2417
+ arrs[narrs++] = op[iop];
2418
+ }
2419
+ /* Otherwise just pass in the dtype */
2420
+ else {
2421
+ dtypes[ndtypes++] = op_dtype[iop];
2422
+ }
2423
+ }
2424
+ }
2425
+
2426
+ if (narrs == 0) {
2427
+ npy_intp i;
2428
+ ret = dtypes[0];
2429
+ for (i = 1; i < ndtypes; ++i) {
2430
+ if (ret != dtypes[i])
2431
+ break;
2432
+ }
2433
+ if (i == ndtypes) {
2434
+ if (ndtypes == 1 || PyArray_ISNBO(ret->byteorder)) {
2435
+ Py_INCREF(ret);
2436
+ }
2437
+ else {
2438
+ ret = PyArray_DescrNewByteorder(ret, NPY_NATIVE);
2439
+ }
2440
+ }
2441
+ else {
2442
+ ret = PyArray_ResultType(narrs, arrs, ndtypes, dtypes);
2443
+ }
2444
+ }
2445
+ else {
2446
+ ret = PyArray_ResultType(narrs, arrs, ndtypes, dtypes);
2447
+ }
2448
+
2449
+ return ret;
2450
+ }
2451
+
2452
+ /*
2453
+ * Allocates a temporary array which can be used to replace op
2454
+ * in the iteration. Its dtype will be op_dtype.
2455
+ *
2456
+ * The result array has a memory ordering which matches the iterator,
2457
+ * which may or may not match that of op. The parameter 'shape' may be
2458
+ * NULL, in which case it is filled in from the iterator's shape.
2459
+ *
2460
+ * This function must be called before any axes are coalesced.
2461
+ */
2462
+ static PyArrayObject *
2463
+ npyiter_new_temp_array(NpyIter *iter, PyTypeObject *subtype,
2464
+ npy_uint32 flags, npyiter_opitflags *op_itflags,
2465
+ int op_ndim, npy_intp *shape,
2466
+ PyArray_Descr *op_dtype, int *op_axes)
2467
+ {
2468
+ npy_uint32 itflags = NIT_ITFLAGS(iter);
2469
+ int idim, ndim = NIT_NDIM(iter);
2470
+ int nop = NIT_NOP(iter);
2471
+
2472
+ npy_int8 *perm = NIT_PERM(iter);
2473
+ npy_intp new_shape[NPY_MAXDIMS], strides[NPY_MAXDIMS],
2474
+ stride = op_dtype->elsize;
2475
+ NpyIter_AxisData *axisdata;
2476
+ npy_intp sizeof_axisdata;
2477
+ npy_intp i;
2478
+
2479
+ PyArrayObject *ret;
2480
+
2481
+ /*
2482
+ * There is an interaction with array-dtypes here, which
2483
+ * generally works. Let's say you make an nditer with an
2484
+ * output dtype of a 2-double array. All-scalar inputs
2485
+ * will result in a 1-dimensional output with shape (2).
2486
+ * Everything still works out in the nditer, because the
2487
+ * new dimension is always added on the end, and it cares
2488
+ * about what happens at the beginning.
2489
+ */
2490
+
2491
+ /* If it's a scalar, don't need to check the axes */
2492
+ if (op_ndim == 0) {
2493
+ Py_INCREF(op_dtype);
2494
+ ret = (PyArrayObject *)PyArray_NewFromDescr(subtype, op_dtype, 0,
2495
+ NULL, NULL, NULL, 0, NULL);
2496
+
2497
+ return ret;
2498
+ }
2499
+
2500
+ axisdata = NIT_AXISDATA(iter);
2501
+ sizeof_axisdata = NIT_AXISDATA_SIZEOF(itflags, ndim, nop);
2502
+
2503
+ /* Initialize the strides to invalid values */
2504
+ for (i = 0; i < NPY_MAXDIMS; ++i) {
2505
+ strides[i] = NPY_MAX_INTP;
2506
+ }
2507
+
2508
+ if (op_axes != NULL) {
2509
+ for (idim = 0; idim < ndim; ++idim, NIT_ADVANCE_AXISDATA(axisdata, 1)) {
2510
+ npy_int8 p;
2511
+
2512
+ /* Apply the perm to get the original axis */
2513
+ p = perm[idim];
2514
+ if (p < 0) {
2515
+ i = op_axes[ndim+p];
2516
+ }
2517
+ else {
2518
+ i = op_axes[ndim-p-1];
2519
+ }
2520
+
2521
+ if (i >= 0) {
2522
+ NPY_IT_DBG_PRINT3("Iterator: Setting allocated stride %d "
2523
+ "for iterator dimension %d to %d\n", (int)i,
2524
+ (int)idim, (int)stride);
2525
+ strides[i] = stride;
2526
+ if (shape == NULL) {
2527
+ new_shape[i] = NAD_SHAPE(axisdata);
2528
+ stride *= new_shape[i];
2529
+ if (i >= ndim) {
2530
+ PyErr_SetString(PyExc_ValueError,
2531
+ "automatically allocated output array "
2532
+ "specified with an inconsistent axis mapping");
2533
+ return NULL;
2534
+ }
2535
+ }
2536
+ else {
2537
+ stride *= shape[i];
2538
+ }
2539
+ }
2540
+ else {
2541
+ if (shape == NULL) {
2542
+ /*
2543
+ * If deleting this axis produces a reduction, but
2544
+ * reduction wasn't enabled, throw an error
2545
+ */
2546
+ if (NAD_SHAPE(axisdata) != 1) {
2547
+ if (!(flags & NPY_ITER_REDUCE_OK)) {
2548
+ PyErr_SetString(PyExc_ValueError,
2549
+ "output requires a reduction, but "
2550
+ "reduction is not enabled");
2551
+ return NULL;
2552
+ }
2553
+ if (!((*op_itflags) & NPY_OP_ITFLAG_READ)) {
2554
+ PyErr_SetString(PyExc_ValueError,
2555
+ "output requires a reduction, but "
2556
+ "is flagged as write-only, not read-write");
2557
+ return NULL;
2558
+ }
2559
+
2560
+ NPY_IT_DBG_PRINT("Iterator: Indicating that a "
2561
+ "reduction is occurring\n");
2562
+ /* Indicate that a reduction is occurring */
2563
+ NIT_ITFLAGS(iter) |= NPY_ITFLAG_REDUCE;
2564
+ (*op_itflags) |= NPY_OP_ITFLAG_REDUCE;
2565
+ }
2566
+ }
2567
+ }
2568
+ }
2569
+ }
2570
+ else {
2571
+ for (idim = 0; idim < ndim; ++idim, NIT_ADVANCE_AXISDATA(axisdata, 1)) {
2572
+ npy_int8 p;
2573
+
2574
+ /* Apply the perm to get the original axis */
2575
+ p = perm[idim];
2576
+ if (p < 0) {
2577
+ i = op_ndim + p;
2578
+ }
2579
+ else {
2580
+ i = op_ndim - p - 1;
2581
+ }
2582
+
2583
+ if (i >= 0) {
2584
+ NPY_IT_DBG_PRINT3("Iterator: Setting allocated stride %d "
2585
+ "for iterator dimension %d to %d\n", (int)i,
2586
+ (int)idim, (int)stride);
2587
+ strides[i] = stride;
2588
+ if (shape == NULL) {
2589
+ new_shape[i] = NAD_SHAPE(axisdata);
2590
+ stride *= new_shape[i];
2591
+ }
2592
+ else {
2593
+ stride *= shape[i];
2594
+ }
2595
+ }
2596
+ }
2597
+ }
2598
+
2599
+ /*
2600
+ * If custom axes were specified, some dimensions may not have been used.
2601
+ * Add the REDUCE itflag if this creates a reduction situation.
2602
+ */
2603
+ if (shape == NULL) {
2604
+ /* Ensure there are no dimension gaps in op_axes, and find op_ndim */
2605
+ op_ndim = ndim;
2606
+ if (op_axes != NULL) {
2607
+ for (i = 0; i < ndim; ++i) {
2608
+ if (strides[i] == NPY_MAX_INTP) {
2609
+ if (op_ndim == ndim) {
2610
+ op_ndim = i;
2611
+ }
2612
+ }
2613
+ /*
2614
+ * If there's a gap in the array's dimensions, it's an error.
2615
+ * For example, op_axes of [0,2] for the automatically
2616
+ * allocated output.
2617
+ */
2618
+ else if (op_ndim != ndim) {
2619
+ PyErr_SetString(PyExc_ValueError,
2620
+ "automatically allocated output array "
2621
+ "specified with an inconsistent axis mapping");
2622
+ return NULL;
2623
+ }
2624
+ }
2625
+ }
2626
+ }
2627
+ else {
2628
+ for (i = 0; i < op_ndim; ++i) {
2629
+ if (strides[i] == NPY_MAX_INTP) {
2630
+ npy_intp factor, new_strides[NPY_MAXDIMS],
2631
+ itemsize;
2632
+
2633
+ /* Fill in the missing strides in C order */
2634
+ factor = 1;
2635
+ itemsize = op_dtype->elsize;
2636
+ for (i = op_ndim-1; i >= 0; --i) {
2637
+ if (strides[i] == NPY_MAX_INTP) {
2638
+ new_strides[i] = factor * itemsize;
2639
+ factor *= shape[i];
2640
+ }
2641
+ }
2642
+
2643
+ /*
2644
+ * Copy the missing strides, and multiply the existing strides
2645
+ * by the calculated factor. This way, the missing strides
2646
+ * are tighter together in memory, which is good for nested
2647
+ * loops.
2648
+ */
2649
+ for (i = 0; i < op_ndim; ++i) {
2650
+ if (strides[i] == NPY_MAX_INTP) {
2651
+ strides[i] = new_strides[i];
2652
+ }
2653
+ else {
2654
+ strides[i] *= factor;
2655
+ }
2656
+ }
2657
+
2658
+ break;
2659
+ }
2660
+ }
2661
+ }
2662
+
2663
+ /* If shape was NULL, set it to the shape we calculated */
2664
+ if (shape == NULL) {
2665
+ shape = new_shape;
2666
+ }
2667
+
2668
+ /* Allocate the temporary array */
2669
+ Py_INCREF(op_dtype);
2670
+ ret = (PyArrayObject *)PyArray_NewFromDescr(subtype, op_dtype, op_ndim,
2671
+ shape, strides, NULL, 0, NULL);
2672
+ if (ret == NULL) {
2673
+ return NULL;
2674
+ }
2675
+
2676
+ /* Make sure all the flags are good */
2677
+ PyArray_UpdateFlags(ret, NPY_ARRAY_UPDATE_ALL);
2678
+
2679
+ /* Double-check that the subtype didn't mess with the dimensions */
2680
+ if (subtype != &PyArray_Type) {
2681
+ if (PyArray_NDIM(ret) != op_ndim ||
2682
+ !PyArray_CompareLists(shape, PyArray_DIMS(ret), op_ndim)) {
2683
+ PyErr_SetString(PyExc_RuntimeError,
2684
+ "Iterator automatic output has an array subtype "
2685
+ "which changed the dimensions of the output");
2686
+ Py_DECREF(ret);
2687
+ return NULL;
2688
+ }
2689
+ }
2690
+
2691
+ return ret;
2692
+ }
2693
+
2694
+ static int
2695
+ npyiter_allocate_arrays(NpyIter *iter,
2696
+ npy_uint32 flags,
2697
+ PyArray_Descr **op_dtype, PyTypeObject *subtype,
2698
+ npy_uint32 *op_flags, npyiter_opitflags *op_itflags,
2699
+ int **op_axes)
2700
+ {
2701
+ npy_uint32 itflags = NIT_ITFLAGS(iter);
2702
+ int idim, ndim = NIT_NDIM(iter);
2703
+ int iop, nop = NIT_NOP(iter);
2704
+
2705
+ int check_writemasked_reductions = 0;
2706
+
2707
+ NpyIter_BufferData *bufferdata = NULL;
2708
+ PyArrayObject **op = NIT_OPERANDS(iter);
2709
+
2710
+ if (itflags & NPY_ITFLAG_BUFFER) {
2711
+ bufferdata = NIT_BUFFERDATA(iter);
2712
+ }
2713
+
2714
+ for (iop = 0; iop < nop; ++iop) {
2715
+ /*
2716
+ * Check whether there are any WRITEMASKED REDUCE operands
2717
+ * which should be validated after all the strides are filled
2718
+ * in.
2719
+ */
2720
+ if ((op_itflags[iop] &
2721
+ (NPY_OP_ITFLAG_WRITEMASKED | NPY_OP_ITFLAG_REDUCE)) ==
2722
+ (NPY_OP_ITFLAG_WRITEMASKED | NPY_OP_ITFLAG_REDUCE)) {
2723
+ check_writemasked_reductions = 1;
2724
+ }
2725
+
2726
+ /* NULL means an output the iterator should allocate */
2727
+ if (op[iop] == NULL) {
2728
+ PyArrayObject *out;
2729
+ PyTypeObject *op_subtype;
2730
+ int ondim = ndim;
2731
+
2732
+ /* Check whether the subtype was disabled */
2733
+ op_subtype = (op_flags[iop] & NPY_ITER_NO_SUBTYPE) ?
2734
+ &PyArray_Type : subtype;
2735
+
2736
+ /* Allocate the output array */
2737
+ out = npyiter_new_temp_array(iter, op_subtype,
2738
+ flags, &op_itflags[iop],
2739
+ ondim,
2740
+ NULL,
2741
+ op_dtype[iop],
2742
+ op_axes ? op_axes[iop] : NULL);
2743
+ if (out == NULL) {
2744
+ return 0;
2745
+ }
2746
+
2747
+ op[iop] = out;
2748
+
2749
+ /*
2750
+ * Now we need to replace the pointers and strides with values
2751
+ * from the new array.
2752
+ */
2753
+ npyiter_replace_axisdata(iter, iop, op[iop], ondim,
2754
+ PyArray_DATA(op[iop]), op_axes ? op_axes[iop] : NULL);
2755
+
2756
+ /* New arrays are aligned and need no cast */
2757
+ op_itflags[iop] |= NPY_OP_ITFLAG_ALIGNED;
2758
+ op_itflags[iop] &= ~NPY_OP_ITFLAG_CAST;
2759
+ }
2760
+ /*
2761
+ * If casting is required, the operand is read-only, and
2762
+ * it's an array scalar, make a copy whether or not the
2763
+ * copy flag is enabled.
2764
+ */
2765
+ else if ((op_itflags[iop] & (NPY_OP_ITFLAG_CAST |
2766
+ NPY_OP_ITFLAG_READ |
2767
+ NPY_OP_ITFLAG_WRITE)) == (NPY_OP_ITFLAG_CAST |
2768
+ NPY_OP_ITFLAG_READ) &&
2769
+ PyArray_NDIM(op[iop]) == 0) {
2770
+ PyArrayObject *temp;
2771
+ Py_INCREF(op_dtype[iop]);
2772
+ temp = (PyArrayObject *)PyArray_NewFromDescr(
2773
+ &PyArray_Type, op_dtype[iop],
2774
+ 0, NULL, NULL, NULL, 0, NULL);
2775
+ if (temp == NULL) {
2776
+ return 0;
2777
+ }
2778
+ if (PyArray_CopyInto(temp, op[iop]) != 0) {
2779
+ Py_DECREF(temp);
2780
+ return 0;
2781
+ }
2782
+ Py_DECREF(op[iop]);
2783
+ op[iop] = temp;
2784
+
2785
+ /*
2786
+ * Now we need to replace the pointers and strides with values
2787
+ * from the temporary array.
2788
+ */
2789
+ npyiter_replace_axisdata(iter, iop, op[iop], 0,
2790
+ PyArray_DATA(op[iop]), NULL);
2791
+
2792
+ /*
2793
+ * New arrays are aligned need no cast, and in the case
2794
+ * of scalars, always have stride 0 so never need buffering
2795
+ */
2796
+ op_itflags[iop] |= (NPY_OP_ITFLAG_ALIGNED |
2797
+ NPY_OP_ITFLAG_BUFNEVER);
2798
+ op_itflags[iop] &= ~NPY_OP_ITFLAG_CAST;
2799
+ if (itflags & NPY_ITFLAG_BUFFER) {
2800
+ NBF_STRIDES(bufferdata)[iop] = 0;
2801
+ }
2802
+ }
2803
+ /* If casting is required and permitted */
2804
+ else if ((op_itflags[iop] & NPY_OP_ITFLAG_CAST) &&
2805
+ (op_flags[iop] & (NPY_ITER_COPY|NPY_ITER_UPDATEIFCOPY))) {
2806
+ PyArrayObject *temp;
2807
+ int ondim = PyArray_NDIM(op[iop]);
2808
+
2809
+ /* Allocate the temporary array, if possible */
2810
+ temp = npyiter_new_temp_array(iter, &PyArray_Type,
2811
+ flags, &op_itflags[iop],
2812
+ ondim,
2813
+ PyArray_DIMS(op[iop]),
2814
+ op_dtype[iop],
2815
+ op_axes ? op_axes[iop] : NULL);
2816
+ if (temp == NULL) {
2817
+ return 0;
2818
+ }
2819
+
2820
+ /*
2821
+ * If the data will be read, copy it into temp.
2822
+ * TODO: It might be possible to do a view into
2823
+ * op[iop]'s mask instead here.
2824
+ */
2825
+ if (op_itflags[iop] & NPY_OP_ITFLAG_READ) {
2826
+ if (PyArray_CopyInto(temp, op[iop]) != 0) {
2827
+ Py_DECREF(temp);
2828
+ return 0;
2829
+ }
2830
+ }
2831
+ /* If the data will be written to, set UPDATEIFCOPY */
2832
+ if (op_itflags[iop] & NPY_OP_ITFLAG_WRITE) {
2833
+ Py_INCREF(op[iop]);
2834
+ if (PyArray_SetUpdateIfCopyBase(temp, op[iop]) < 0) {
2835
+ Py_DECREF(temp);
2836
+ return 0;
2837
+ }
2838
+ }
2839
+
2840
+ Py_DECREF(op[iop]);
2841
+ op[iop] = temp;
2842
+
2843
+ /*
2844
+ * Now we need to replace the pointers and strides with values
2845
+ * from the temporary array.
2846
+ */
2847
+ npyiter_replace_axisdata(iter, iop, op[iop], ondim,
2848
+ PyArray_DATA(op[iop]), op_axes ? op_axes[iop] : NULL);
2849
+
2850
+ /* The temporary copy is aligned and needs no cast */
2851
+ op_itflags[iop] |= NPY_OP_ITFLAG_ALIGNED;
2852
+ op_itflags[iop] &= ~NPY_OP_ITFLAG_CAST;
2853
+ }
2854
+ else {
2855
+ /*
2856
+ * Buffering must be enabled for casting/conversion if copy
2857
+ * wasn't specified.
2858
+ */
2859
+ if ((op_itflags[iop] & NPY_OP_ITFLAG_CAST) &&
2860
+ !(itflags & NPY_ITFLAG_BUFFER)) {
2861
+ PyErr_SetString(PyExc_TypeError,
2862
+ "Iterator operand required copying or buffering, "
2863
+ "but neither copying nor buffering was enabled");
2864
+ return 0;
2865
+ }
2866
+
2867
+ /*
2868
+ * If the operand is aligned, any buffering can use aligned
2869
+ * optimizations.
2870
+ */
2871
+ if (PyArray_ISALIGNED(op[iop])) {
2872
+ op_itflags[iop] |= NPY_OP_ITFLAG_ALIGNED;
2873
+ }
2874
+ }
2875
+
2876
+ /* Here we can finally check for contiguous iteration */
2877
+ if (op_flags[iop] & NPY_ITER_CONTIG) {
2878
+ NpyIter_AxisData *axisdata = NIT_AXISDATA(iter);
2879
+ npy_intp stride = NAD_STRIDES(axisdata)[iop];
2880
+
2881
+ if (stride != op_dtype[iop]->elsize) {
2882
+ NPY_IT_DBG_PRINT("Iterator: Setting NPY_OP_ITFLAG_CAST "
2883
+ "because of NPY_ITER_CONTIG\n");
2884
+ op_itflags[iop] |= NPY_OP_ITFLAG_CAST;
2885
+ if (!(itflags & NPY_ITFLAG_BUFFER)) {
2886
+ PyErr_SetString(PyExc_TypeError,
2887
+ "Iterator operand required buffering, "
2888
+ "to be contiguous as requested, but "
2889
+ "buffering is not enabled");
2890
+ return 0;
2891
+ }
2892
+ }
2893
+ }
2894
+
2895
+ /*
2896
+ * If no alignment, byte swap, or casting is needed,
2897
+ * the inner stride of this operand works for the whole
2898
+ * array, we can set NPY_OP_ITFLAG_BUFNEVER.
2899
+ */
2900
+ if ((itflags & NPY_ITFLAG_BUFFER) &&
2901
+ !(op_itflags[iop] & NPY_OP_ITFLAG_CAST)) {
2902
+ NpyIter_AxisData *axisdata = NIT_AXISDATA(iter);
2903
+ if (ndim <= 1) {
2904
+ op_itflags[iop] |= NPY_OP_ITFLAG_BUFNEVER;
2905
+ NBF_STRIDES(bufferdata)[iop] = NAD_STRIDES(axisdata)[iop];
2906
+ }
2907
+ else if (PyArray_NDIM(op[iop]) > 0) {
2908
+ npy_intp stride, shape, innerstride = 0, innershape;
2909
+ npy_intp sizeof_axisdata =
2910
+ NIT_AXISDATA_SIZEOF(itflags, ndim, nop);
2911
+ /* Find stride of the first non-empty shape */
2912
+ for (idim = 0; idim < ndim; ++idim) {
2913
+ innershape = NAD_SHAPE(axisdata);
2914
+ if (innershape != 1) {
2915
+ innerstride = NAD_STRIDES(axisdata)[iop];
2916
+ break;
2917
+ }
2918
+ NIT_ADVANCE_AXISDATA(axisdata, 1);
2919
+ }
2920
+ ++idim;
2921
+ NIT_ADVANCE_AXISDATA(axisdata, 1);
2922
+ /* Check that everything could have coalesced together */
2923
+ for (; idim < ndim; ++idim) {
2924
+ stride = NAD_STRIDES(axisdata)[iop];
2925
+ shape = NAD_SHAPE(axisdata);
2926
+ if (shape != 1) {
2927
+ /*
2928
+ * If N times the inner stride doesn't equal this
2929
+ * stride, the multi-dimensionality is needed.
2930
+ */
2931
+ if (innerstride*innershape != stride) {
2932
+ break;
2933
+ }
2934
+ else {
2935
+ innershape *= shape;
2936
+ }
2937
+ }
2938
+ NIT_ADVANCE_AXISDATA(axisdata, 1);
2939
+ }
2940
+ /*
2941
+ * If we looped all the way to the end, one stride works.
2942
+ * Set that stride, because it may not belong to the first
2943
+ * dimension.
2944
+ */
2945
+ if (idim == ndim) {
2946
+ op_itflags[iop] |= NPY_OP_ITFLAG_BUFNEVER;
2947
+ NBF_STRIDES(bufferdata)[iop] = innerstride;
2948
+ }
2949
+ }
2950
+ }
2951
+ }
2952
+
2953
+ if (check_writemasked_reductions) {
2954
+ for (iop = 0; iop < nop; ++iop) {
2955
+ /*
2956
+ * Check whether there are any WRITEMASKED REDUCE operands
2957
+ * which should be validated now that all the strides are filled
2958
+ * in.
2959
+ */
2960
+ if ((op_itflags[iop] &
2961
+ (NPY_OP_ITFLAG_WRITEMASKED | NPY_OP_ITFLAG_REDUCE)) ==
2962
+ (NPY_OP_ITFLAG_WRITEMASKED | NPY_OP_ITFLAG_REDUCE)) {
2963
+ /*
2964
+ * If the ARRAYMASK has 'bigger' dimensions
2965
+ * than this REDUCE WRITEMASKED operand,
2966
+ * the result would be more than one mask
2967
+ * value per reduction element, something which
2968
+ * is invalid. This function provides validation
2969
+ * for that.
2970
+ */
2971
+ if (!check_mask_for_writemasked_reduction(iter, iop)) {
2972
+ return 0;
2973
+ }
2974
+ }
2975
+ }
2976
+ }
2977
+
2978
+ return 1;
2979
+ }
2980
+
2981
+ /*
2982
+ * The __array_priority__ attribute of the inputs determines
2983
+ * the subtype of any output arrays. This function finds the
2984
+ * subtype of the input array with highest priority.
2985
+ */
2986
+ static void
2987
+ npyiter_get_priority_subtype(int nop, PyArrayObject **op,
2988
+ npyiter_opitflags *op_itflags,
2989
+ double *subtype_priority,
2990
+ PyTypeObject **subtype)
2991
+ {
2992
+ int iop;
2993
+
2994
+ for (iop = 0; iop < nop; ++iop) {
2995
+ if (op[iop] != NULL && op_itflags[iop] & NPY_OP_ITFLAG_READ) {
2996
+ double priority = PyArray_GetPriority((PyObject *)op[iop], 0.0);
2997
+ if (priority > *subtype_priority) {
2998
+ *subtype_priority = priority;
2999
+ *subtype = Py_TYPE(op[iop]);
3000
+ }
3001
+ }
3002
+ }
3003
+ }
3004
+
3005
+ static int
3006
+ npyiter_allocate_transfer_functions(NpyIter *iter)
3007
+ {
3008
+ npy_uint32 itflags = NIT_ITFLAGS(iter);
3009
+ /*int ndim = NIT_NDIM(iter);*/
3010
+ int iop = 0, nop = NIT_NOP(iter);
3011
+
3012
+ npy_intp i;
3013
+ npyiter_opitflags *op_itflags = NIT_OPITFLAGS(iter);
3014
+ NpyIter_BufferData *bufferdata = NIT_BUFFERDATA(iter);
3015
+ NpyIter_AxisData *axisdata = NIT_AXISDATA(iter);
3016
+ PyArrayObject **op = NIT_OPERANDS(iter);
3017
+ PyArray_Descr **op_dtype = NIT_DTYPES(iter);
3018
+ npy_intp *strides = NAD_STRIDES(axisdata), op_stride;
3019
+ PyArray_StridedUnaryOp **readtransferfn = NBF_READTRANSFERFN(bufferdata),
3020
+ **writetransferfn = NBF_WRITETRANSFERFN(bufferdata);
3021
+ NpyAuxData **readtransferdata = NBF_READTRANSFERDATA(bufferdata),
3022
+ **writetransferdata = NBF_WRITETRANSFERDATA(bufferdata);
3023
+
3024
+ PyArray_StridedUnaryOp *stransfer = NULL;
3025
+ NpyAuxData *transferdata = NULL;
3026
+ int needs_api = 0;
3027
+
3028
+ for (iop = 0; iop < nop; ++iop) {
3029
+ npyiter_opitflags flags = op_itflags[iop];
3030
+ /*
3031
+ * Reduction operands may be buffered with a different stride,
3032
+ * so we must pass NPY_MAX_INTP to the transfer function factory.
3033
+ */
3034
+ op_stride = (flags & NPY_OP_ITFLAG_REDUCE) ? NPY_MAX_INTP :
3035
+ strides[iop];
3036
+
3037
+ /*
3038
+ * If we have determined that a buffer may be needed,
3039
+ * allocate the appropriate transfer functions
3040
+ */
3041
+ if (!(flags & NPY_OP_ITFLAG_BUFNEVER)) {
3042
+ if (flags & NPY_OP_ITFLAG_READ) {
3043
+ int move_references = 0;
3044
+ if (PyArray_GetDTypeTransferFunction(
3045
+ (flags & NPY_OP_ITFLAG_ALIGNED) != 0,
3046
+ op_stride,
3047
+ op_dtype[iop]->elsize,
3048
+ PyArray_DESCR(op[iop]),
3049
+ op_dtype[iop],
3050
+ move_references,
3051
+ &stransfer,
3052
+ &transferdata,
3053
+ &needs_api) != NPY_SUCCEED) {
3054
+ goto fail;
3055
+ }
3056
+ readtransferfn[iop] = stransfer;
3057
+ readtransferdata[iop] = transferdata;
3058
+ }
3059
+ else {
3060
+ readtransferfn[iop] = NULL;
3061
+ }
3062
+ if (flags & NPY_OP_ITFLAG_WRITE) {
3063
+ int move_references = 1;
3064
+
3065
+ /* If the operand is WRITEMASKED, use a masked transfer fn */
3066
+ if (flags & NPY_OP_ITFLAG_WRITEMASKED) {
3067
+ int maskop = NIT_MASKOP(iter);
3068
+ PyArray_Descr *mask_dtype = PyArray_DESCR(op[maskop]);
3069
+
3070
+ /*
3071
+ * If the mask's stride is contiguous, use it, otherwise
3072
+ * the mask may or may not be buffered, so the stride
3073
+ * could be inconsistent.
3074
+ */
3075
+ if (PyArray_GetMaskedDTypeTransferFunction(
3076
+ (flags & NPY_OP_ITFLAG_ALIGNED) != 0,
3077
+ op_dtype[iop]->elsize,
3078
+ op_stride,
3079
+ (strides[maskop] == mask_dtype->elsize) ?
3080
+ mask_dtype->elsize :
3081
+ NPY_MAX_INTP,
3082
+ op_dtype[iop],
3083
+ PyArray_DESCR(op[iop]),
3084
+ mask_dtype,
3085
+ move_references,
3086
+ (PyArray_MaskedStridedUnaryOp **)&stransfer,
3087
+ &transferdata,
3088
+ &needs_api) != NPY_SUCCEED) {
3089
+ goto fail;
3090
+ }
3091
+ }
3092
+ else {
3093
+ if (PyArray_GetDTypeTransferFunction(
3094
+ (flags & NPY_OP_ITFLAG_ALIGNED) != 0,
3095
+ op_dtype[iop]->elsize,
3096
+ op_stride,
3097
+ op_dtype[iop],
3098
+ PyArray_DESCR(op[iop]),
3099
+ move_references,
3100
+ &stransfer,
3101
+ &transferdata,
3102
+ &needs_api) != NPY_SUCCEED) {
3103
+ goto fail;
3104
+ }
3105
+ }
3106
+ writetransferfn[iop] = stransfer;
3107
+ writetransferdata[iop] = transferdata;
3108
+ }
3109
+ /* If no write back but there are references make a decref fn */
3110
+ else if (PyDataType_REFCHK(op_dtype[iop])) {
3111
+ /*
3112
+ * By passing NULL to dst_type and setting move_references
3113
+ * to 1, we get back a function that just decrements the
3114
+ * src references.
3115
+ */
3116
+ if (PyArray_GetDTypeTransferFunction(
3117
+ (flags & NPY_OP_ITFLAG_ALIGNED) != 0,
3118
+ op_dtype[iop]->elsize, 0,
3119
+ op_dtype[iop], NULL,
3120
+ 1,
3121
+ &stransfer,
3122
+ &transferdata,
3123
+ &needs_api) != NPY_SUCCEED) {
3124
+ goto fail;
3125
+ }
3126
+ writetransferfn[iop] = stransfer;
3127
+ writetransferdata[iop] = transferdata;
3128
+ }
3129
+ else {
3130
+ writetransferfn[iop] = NULL;
3131
+ }
3132
+ }
3133
+ else {
3134
+ readtransferfn[iop] = NULL;
3135
+ writetransferfn[iop] = NULL;
3136
+ }
3137
+ }
3138
+
3139
+ /* If any of the dtype transfer functions needed the API, flag it */
3140
+ if (needs_api) {
3141
+ NIT_ITFLAGS(iter) |= NPY_ITFLAG_NEEDSAPI;
3142
+ }
3143
+
3144
+ return 1;
3145
+
3146
+ fail:
3147
+ for (i = 0; i < iop; ++i) {
3148
+ if (readtransferdata[iop] != NULL) {
3149
+ NPY_AUXDATA_FREE(readtransferdata[iop]);
3150
+ readtransferdata[iop] = NULL;
3151
+ }
3152
+ if (writetransferdata[iop] != NULL) {
3153
+ NPY_AUXDATA_FREE(writetransferdata[iop]);
3154
+ writetransferdata[iop] = NULL;
3155
+ }
3156
+ }
3157
+ return 0;
3158
+ }
3159
+
3160
+ #undef NPY_ITERATOR_IMPLEMENTATION_CODE