numpy 1.9.2__zip → 1.10.0__zip

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